document.getElementByIdについて

解決


WEB初心者  2005-03-25 06:41:12  No: 89033

いつも拝見させていただいています。
厳密には標題のdocument.getElementByIdとは、ちがうのですが、
Me.WebBrowser1.Navigate2 "http://xxxxxxxxxxxxxxxxx/"で取得したページの中の次のようなボタンをVBでクリックさせるのはどうしたらいいのでしょうか。

<input type="button" value="更新" onClick="cmd(1)">

name="NNNNN" や  id="IIIII" 等がある場合に、そこへ入力する方法は、ここの過去ログで
document.getElementsByName("NNNNN")(?).Value = "入力したい文字"

document.getElementById("IIIII").).Value = "入力したい文字"

で行えることはわかったのですが、name も Id  無いボタンをクリックする方法がわかりません。
よろしくご指導ください。
XP VB6.0 です。


ガッ  2005-03-25 06:44:02  No: 89034

※参考までに。
ノ<対象となるページが常に固定されているなら。
全ての内側のオブジェクトを列挙していって、
valueが"更新"のボタンのClick()を呼び出す。
…というのを昔やりました(ぇ


WEB初心者  2005-03-25 07:05:23  No: 89035

ガッ様ありがとうございます。

>対象となるページが常に固定されているなら。

対象は固定です。

>全ての内側のオブジェクトを列挙していって、
>valueが"更新"のボタンのClick()を呼び出す。

Valueが"更新"のボタンは、このひとつだけです。
したがって  
document.getElementsByValue("更新").Click("cmd(1)")
(あったらいいなあ〜的記述です)
みたいな事ができればいいんですが・・・

実際に
>valueが"更新"のボタンのClick()を呼び出す。
記述方法がわかりません。

よろしくお願いします。


魔界の仮面弁士  2005-03-25 07:27:36  No: 89036

getElementsByTagName を使ってみるとか。


ガッ  2005-03-25 08:05:38  No: 89037

> >valueが"更新"のボタンのClick()を呼び出す。
> 記述方法がわかりません。
私の方法について言えば、
・For Each-Nextのエレメント変数
・For-Nextのカウンタ変数を引数とした、buttonを返す関数X()の戻り値
として、すでにbuttonクラスのインスタンスである[valueが"更新"のボタン]が判っているので、
あとは
[valueが"更新"のボタン].click()
とすれば、クリックされたことになるかと思います。

※昔、暇つぶしにWEBゲームのチートを作るときにこんな手法を使いました。


WEB初心者  2005-03-26 01:51:14  No: 89038

ガッ様  魔界の仮面弁士様
ご指導ありがとうございました。具体的な記述を手探りでためしながら、やっと
ここまでたどり着きました。

Dim objDocument     As Object
Dim objTarget       As Object
Dim objInput        As Object

'接続
.WebBrowser1.Navigate2 "xxxxxxxxxxxxxxxxxxxxx"
  Do While .WebBrowser1.Busy Or .WebBrowser1.ReadyState <> 4
            DoEvents
         Loop
'
'更新ボタンを探してValue="更新"ならClick
Set objDocument = .WebBrowser1.Document
Set objInput = objDocument.getElementsByTagName("INPUT")

For Each objTarget In objInput
    If objTarget.Value = "更新" Then
                objTarget.Click
                Exit For
    End If
Next
'
で更新ボタンを押すことは出来ました!!!!ありがとうございます。

が・・・・・・・・・。

こまったことに、この後、HTML内のJAVASCRIPTのCONFIRM()で確認ダイアログが
表示されます。(更新しますか?のメッセージで[OK]ボタンがフォーカス状態)

ここでまたENTERをたたく必要が出てきました。

・・・・・
・・・・・
Next         'の後に

Sleep 1500
SendKeys "{ENTER}"

.WebBrowser1.Stop
.WebBrowser1.Visible = False
End With
Unload Me
としてみましたがENTERが送れていません。
というか、確認ダイアログのOKをクリックするまでは、
.WebBrowser1.Stop
.WebBrowser1.Visible = False
も実行されませんので、おそらくVB自体が、確認ダイアログが表示された時点
で停止しているのでしょうか。(Sleep 1500 の前かもわかりません)

なにからなにまで頼りっぱなしで申し訳ありませんが、もう少しお教え願えな
いでしょうか。よろしくお願いします。


LESIA  2005-03-26 06:33:26  No: 89039

JAVASCRIPTののCONFIRM()がどんなのかはわかりませんが、Navigate2で
JAVASCRIPTを実行させることもできるので、確認ダイアログを表示する
部分を省いたJAVASCRIPTのコードを実行すればうまくいくかも。


WEB初心者  2005-03-26 06:53:41  No: 89040

LESIA様  早速のご指導・ご教授ありがとうございます。

VBでClickした  HTML の INPUT Tag  は、
<input type="button" value="更新" onClick="cmd()">  で

cmd()の内容は、
function cmd()
{  
  if(!confirm("更新します。よろしいですか?"))
  {
    return;
  }
  XXXXXXXX();
  }
}
です。したがって、VBで
function cmd()
{  
  XXXXXXXX();
}
というJavaScriptを作って、実行させることができればいいのですが
そんなことができるのでしょうか?

>Navigate2で
>JAVASCRIPTを実行させることもできるので、確認ダイアログを表示する
>部分を省いたJAVASCRIPTのコードを実行すればうまくいくかも。

なんだか、できそうな気がしてきて、ドキドキしていますが、具体的な
方法が、見当もつきません。
どうかよろしくお願いします。


ガッ  2005-03-26 07:01:15  No: 89041

※気になったモノ
document.scriptsで、スクリプトのコレクションが手に入る予感…
中身変えられるのかなぁ…


LESIA  2005-03-27 10:48:44  No: 89042

> です。したがって、VBで
> function cmd()
> {    
>     XXXXXXXX();
> }
> というJavaScriptを作って、実行させることができればいいのですが
> そんなことができるのでしょうか?

cmdという関数はすでにあるので、cmd2を作って実行するなら、こんな感じです。
WebBrowser1.Navigate2 "javascript:function cmd2(){XXXXXXXX()}cmd2()"


LESIA  2005-03-27 11:09:53  No: 89043

XXXXXXXX()もスクリプトだったら
WebBrowser1.Navigate2 "JavaScript:XXXXXXXX()"
だけでもいけるかも、


WEB初心者  2005-03-27 18:21:43  No: 89044

LESIA様  
JavaScriptが実行できました。
感激です。本当にありがとうございました。
VBでここまでできるとは、思ってもいませんでした。

色々ご指導いただきました、みなさまにもお礼申し上げます。


WEB初心者  2005-03-27 18:22:23  No: 89045

解決とさせていただきます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加