- ベストアンサー
IE等のブラウザにテキスト入力やボタンクリックを自動でプログラムで行いたい。
IE等のブラウザや証券会社、懸賞等のブラウザのテキスト入力やボタン操作を自動でVB2008プログラムで行いたいのです。 例えば 住所 氏名 ID Password 等を自動的に入力し、最後にOKボタンをクリックすと等の動作を 自動で行いたいのです。 書店で探しても、ネットで検索しても見あたりません。 どなたかご教授下さい。 宜しく御願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
objIE.Document.Forms(0).Elements("氏名").value = "山本山" objIE.Document.Forms(0).Elements("国").value = "日本" objIE.Document.Forms(0).Elements("SUBMIT").click() なる要素が存在しないからエラーになるのです。 値をセットするのは <input type=text name=ship-name maxlength=50 size=50> 等の要素です。ページのソースをよく解析してみて下さい。 それから、ブラウザーの処理を待つ必要もあります。 そのためのループも必要です。 以下で一応動作します。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim objIE As Object Dim strURL As String = "https://order.store.yahoo.co.jp/cgi-bin/wg-request-catalog?charade" objIE = CreateObject("InternetExplorer.application") objIE.Navigate(strURL) objIE.Visible = True While objIE.ReadyState <> 4 While objIE.Busy = True My.Application.DoEvents() End While End While objIE.Document.Forms(0).Item("ship-name").Value = "山本山" objIE.Document.Forms(0).Item("ship-country").Value = "日本" objIE.Document.Forms(0).Submit() End Sub
その他の回答 (3)
- yyr446
- ベストアンサー率65% (870/1330)
Do While objIE.Busy DoEvents() Loop Do While objIE.readyState <> "4" DoEvents() Loop の方がよいかも あるいは Do While (objIE.document.readyState <> "complete") DoEvents() Loop とか、単に Sleep(2000) で待つだけとか、ブラウザーのバージョン、Windowsのバージョン VBのバージョン等によって違いがあるのかも知れません。 ちなみに、VBによるIE操作は正統派じゃなく、おまけの機能みたいなものと思った方ほうがよろしかろうと思います。本格的にいろいろやろうとすると、次から次へと壁につきあたります。
お礼
yyr446様、色々有り難う御座いました。 結果は、家のPCでは、以下のソース全てに渡り例外エラーが出ました。 教えて戴く前の一番最初に出たエラーと同じです。 ですから、私も前に進めなかったのです。 64bitと32bitの違いが出てきているのでしょうか。 それも、悪役のVistaですからね。VistaX64です。 いろいろと問題が有るのでしょうね。 一つ一つ地道に解決して行きたいと思います。 有り難う御座いました。 これが完成すれば、株式チャートのポップウインドウのメッセージ処理を行いたいと思っております。 有り難う御座いました。 以下while文を抜いても氏名入力等にエラーが出ます。 While objIE.ReadyState <> 4 While objIE.Busy = True My.Application.DoEvents() End While End While '以下の文にもエラーがでます。(Vista X64) objIE.Document.Forms(0).Item("ship-name").Value = "山本山" objIE.Document.Forms(0).Item("ship-country").Value = "日本" objIE.Document.Forms(0).Submit()
補足
やっと原因がわかりました。 VistaX64が災いしているようです。 私の部屋の隣の孫のPCですが、XPが入っておりますが、それに 念のためインストールし、修正していただいたリストを走らせてみますと旨く完璧に動きました。 ところが、VistaX64のPCでは、ソースリストを入れてデバッグを行ったら全く動かずフリーズに近い状態になります。 このことから、VB2008そのものが、VistaX64に対応していないのかも知れませんね。 XPでは全く問題なく動作します。 以上宜しく御願い致します。
- yyr446
- ベストアンサー率65% (870/1330)
「デスクトップ上でポップアップで出るメッセージ」って、何でしょうか? この質問の関連と考えるとブラウザーに読み込んだページのjavascriptがポップアップ表示させている子ウィンドウ(中身はHTML)の事でしょうか?それだと操作できる可能性はあります。 DOM要素(エレメント)をたどって、その要素のクリック動作のイベントをVBから行えばいいのです。あるいはjavascriptの関数をコールするだけですむかもしれません。DOM要素(エレメント)がわかれば、VBのIEオブジェクトで操作可能です。人様のページのDOM要素(エレメント)の仕組みを調べるのがたいへんなだけです。DOM要素というのは平たくいえばhtmlのタグでマークされている部分の事です。javascriptというのはブラウザー内で実行されるhtmlファイルに含まれるプログラムコードの事です。このあたりの事を先に研究してみるのをお勧めします。 Webに関係ないポップアップの操作だとすると、そのポップアップを出しているアプリケーションのAPI仕様が無いとまず不可能です。 Windows OS自体が出すWindow(イクスプローラーとかコントロールパネルとか...)なら"Shell.Application"オブジェクトとか"WScript.Shell"オブジェクトで操作できる場合があります。このへんの仕様はマイクロソフトのMSDNにしかないので、日曜プログラマーは苦労します。
お礼
yyr446様、早速のご回答有り難う御座います。 yyr446様はご存じかどうか分かりませんが、VTやCTトレーダーのチャートを表示しながら、FXの自動売買なんかをやっていますと、ネットのトラブルやハイトラ等で回線が切れたり、証券会社のサーバーのトラブルでメッセージがポップアップで表示され、「回線の再接続をしますか」というようなメッセージが出ます。 その時にユーザーが見てないと回線が切られてしまいトレードが終わってしまい、損をしたり儲けが無くなったりします。 その為に回線を自動的に再接続するためのソフトが有れば非常に助かるわけです。 そのようなソフトが市販品でありますが非常に高いのです。 又、そのように、IE以外の専用ブラウザ??が多々あると思いますが、証券会社に限らずWEBにたいしてのコントロールは大変なのでしょうか。難しいのでしょうか。 できればそのようなソフトを楽しみながら作りたいと思っておりますが難しいでしょうか。 以上宜しくお願い致します。
- yyr446
- ベストアンサー率65% (870/1330)
出来るページと出来ないページがあります。 以下のページが参考になるかと http://www.ken3.org/cgi-bin/group/vba_ie.asp http://www.happy2-island.com/vbs/cafe02/capter00701.shtml
補足
VB2008にて、下記のように、試験的に作成しましたが、エラーが起き駄目でした。 記述に間違いが有るのでしょうか どなたか宜しくお願い致します。 ----------------------------------------------------------------- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim objIE As Object Dim strURL As String = "https://order.store.yahoo.co.jp/cgi-bin/wg-request-catalog?charade" objIE = CreateObject("InternetExplorer.application") objIE.Navigate(strURL) objIE.Visible = True 'ここから下がエラーを起こします。 objIE.Document.Forms(0).Elements("氏名").value = "山本山" objIE.Document.Forms(0).Elements("国").value = "日本" objIE.Document.Forms(0).Elements("SUBMIT").click() End Sub
お礼
yyr446様、大変有り難う御座いました。 お陰様で動きました。 非常に嬉しいです。 60歳になって久々の感激です。 "Item"が分からなかったです。 HTMLのソースを見まして、"ship-name"は分かってましたけど それでもエラーが出ましたのでもう駄目かなーと思いました。 "Elements"では駄目なのですね。 非常に感激です。 有り難うございました。 そして、もう一つお聞きしたいことが有るのですが、分かる範囲で結構なのですが、デスクトップ上でポップアップで出るメッセージに対して、そのメッセージに応じて、OKとかキャンセルとかのボタンをプログラムで押すことって可能でしょうか。 それは又プログラム的にはどんな方法をとれば良いのでしょうか。 宜しく御願い致します。
補足
yyr446様、大変有り難う御座いました。 今会社から家に帰り入力しデバッグをしてみますと、下記の箇所で例外エラーが発生しました。 会社でデバッグをしましたところ旨く完璧に動きましたのに、家のPCではエラーです。 どうゆうことでしょうか。 不思議です。 While objIE.Busy = True ← この記述で例外エラーが発生 もし、会社のPCと家のPCの環境が違うと言えば、家のPCは、VistaX64で会社のPCはXP32です。 それが影響しているのでしょうか。? 以上色々お聞きしますが宜しくお願い致します。