いつも拝見させていただいています。
厳密には標題の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 です。
※参考までに。
ノ<対象となるページが常に固定されているなら。
全ての内側のオブジェクトを列挙していって、
valueが"更新"のボタンのClick()を呼び出す。
…というのを昔やりました(ぇ
ガッ様ありがとうございます。
>対象となるページが常に固定されているなら。
対象は固定です。
>全ての内側のオブジェクトを列挙していって、
>valueが"更新"のボタンのClick()を呼び出す。
Valueが"更新"のボタンは、このひとつだけです。
したがって
document.getElementsByValue("更新").Click("cmd(1)")
(あったらいいなあ〜的記述です)
みたいな事ができればいいんですが・・・
実際に
>valueが"更新"のボタンのClick()を呼び出す。
記述方法がわかりません。
よろしくお願いします。
getElementsByTagName を使ってみるとか。
> >valueが"更新"のボタンのClick()を呼び出す。
> 記述方法がわかりません。
私の方法について言えば、
・For Each-Nextのエレメント変数
・For-Nextのカウンタ変数を引数とした、buttonを返す関数X()の戻り値
として、すでにbuttonクラスのインスタンスである[valueが"更新"のボタン]が判っているので、
あとは
[valueが"更新"のボタン].click()
とすれば、クリックされたことになるかと思います。
※昔、暇つぶしにWEBゲームのチートを作るときにこんな手法を使いました。
ガッ様 魔界の仮面弁士様
ご指導ありがとうございました。具体的な記述を手探りでためしながら、やっと
ここまでたどり着きました。
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 の前かもわかりません)
なにからなにまで頼りっぱなしで申し訳ありませんが、もう少しお教え願えな
いでしょうか。よろしくお願いします。
JAVASCRIPTののCONFIRM()がどんなのかはわかりませんが、Navigate2で
JAVASCRIPTを実行させることもできるので、確認ダイアログを表示する
部分を省いたJAVASCRIPTのコードを実行すればうまくいくかも。
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のコードを実行すればうまくいくかも。
なんだか、できそうな気がしてきて、ドキドキしていますが、具体的な
方法が、見当もつきません。
どうかよろしくお願いします。
※気になったモノ
document.scriptsで、スクリプトのコレクションが手に入る予感…
中身変えられるのかなぁ…
> です。したがって、VBで
> function cmd()
> {
> XXXXXXXX();
> }
> というJavaScriptを作って、実行させることができればいいのですが
> そんなことができるのでしょうか?
cmdという関数はすでにあるので、cmd2を作って実行するなら、こんな感じです。
WebBrowser1.Navigate2 "javascript:function cmd2(){XXXXXXXX()}cmd2()"
XXXXXXXX()もスクリプトだったら
WebBrowser1.Navigate2 "JavaScript:XXXXXXXX()"
だけでもいけるかも、
LESIA様
JavaScriptが実行できました。
感激です。本当にありがとうございました。
VBでここまでできるとは、思ってもいませんでした。
色々ご指導いただきました、みなさまにもお礼申し上げます。
解決とさせていただきます。
ツイート | ![]() |