こんにちは。
WebBrowserコントロールにて表示したサイトの中のボタンを押下しようと
してるのですが、うまくいきません。
HTML(サイト側)
<div class="upload">
<dl class="up">
<dd class="upload">
<a title="アップロード" href="http://~">アップロード</a>
</dd>
</dl></div>
Vb.net側
WebBrowser1.Document.Forms(※0).InvokeMember("submit")
※の数値をいろいろ変えても押下はできませんでした
WebBrowser1.Document.All.GetElementsByName("name")(0).InvokeMember("click")
こちらはボタンにname属性がないので使うことはできず・・・
ボタンを押すことは不可能でしょうか
よろしくおねがいします
>ボタンを押すことは不可能でしょうか
ボタンの位置が不変の場合、マウスポインタをその位置に
セットしてボタンを押すことは出来ます。
> WebBrowserコントロールにて表示したサイトの中のボタンを押下しようと
> してるのですが、うまくいきません。
> HTML(サイト側)
提示された HTML には、どこにもボタンが無いようですが…。
ここでいうボタンとは、
・<button>
・<input type="button">
・<input type="image">
・<input type="submit">
・上記以外
のいずれでしょうか?
ボタンでは無くアンカータグの場合は、 <a href=""> の click を呼び出すか、
あるいは href 属性で示されるアドレスを呼び出せば済むと思います。
いずれにせよ、そのサイトがどういう内容かが明確になっていないので、
こちらも具体的な回答はできない状態です。以下、一般論で回答します。
> WebBrowser1.Document.Forms(※0).InvokeMember("submit")
そのボタンは、<form> タグ配下にありますか?
form 配下に無いのだとしたら、上記のコードは無効です。
form の中にあるのだとしたら、コーディングする前に、
それがどの form の下に置いてあるかを調査してみてください。
(そもそも、Forms からは何個の <form> が検出されているのでしょうか?)
> 押下はできませんでした
ボタンに name が無い場合は、ボタンの click も form の submit も
同じ動作になるかと思います。
もちろん、そもそも form が使われていなかったり、あるいは JavaScript 等で
onclick 等の追加の制御が行われている場合は、それに応じた方法が必要ですが。
> WebBrowser1.Document.All.GetElementsByName("name")(0).InvokeMember("click")
> こちらはボタンにname属性がないので使うことはできず・・・
今回のケースにおいて、どのように記述するのが適切なのかは情報不足で答えられませんが、
たとえば name で指定する方法の他、id で指定する方法、タグ名から列挙して探す方法、
<body> タグ配下の階層を順にたどっていく方法、マウス座標から特定する方法など、
いろいろな方法があります。
また、送信される内容が静的である場合には、HTMLDocument を操作せずとも、
同内容のデータを直接サーバーに送出することで、目的を達成できることもあります。
なお、<form> 内に <input type="file"> を含んでいる場合、
アップロードさせるファイルの指定は、プログラムからでは
直接指定できないように制限が設けられています。
その場合は、ファイル指定操作だけは手動で行って頂くか、あるいは
HTMLDocument を使わずに直接 HTTP リクエストを POST するといった
別の手法が必要になることもあります。