[三流君] [VBAで楽しく] [VBA IE 操作]
−−> No.097 InternetExplorer.application操作 .Clickでクリック

InternetExplorer.application操作 .Clickでクリック

概要: データをフォームに
objIE.document.all.userid.Value = "Ken3" 'ユーザー名
objIE.document.all.pass.Value = "aaa" 'パスワード
でセットして、その後、
objIE.document.all.btn01.Click 'クリックメソッドを実行
単純にクリックメソッドを実行して、自動ログイン処理を作成しました。

※メルマガ記事ではオブジェクトの参照設定をしていませんができれば、下記を参考に参照設定してください。
[Microsoft Internet Controls,Microsoft HTML Object Library を参照設定する](このほうが開発時、操作時に楽)
また、VistaとIE7の場合は、 [IE7 操作 Vistaで失敗]も参考にしてください。

リンク 分類: [Document(文章)からデータを取得] / [Form入力処理] / [Linkリンク情報] / [Image画像情報] / [Frameフレーム処理] サンプル: [IEを使ったVBAのサンプル] / [小さなVBAでIE操作のコード]

メルマガ発行内容

やっと、下記、メルマガで発行した内容です。何かの参考となれば幸いです。
過去のメルマガ[IE操作系の記事一覧]もヨロシクです。

<InternetExplorer.application操作 .Clickでクリック>

どうも、三流プログラマーのKen3です。

今回は、
IE操作で、プログラム側からクリック処理を行ってみます。

何かの参考となれば、幸いです。

/* * 1.今回のキッカケ */

隣のメルマガ、ASP系で、ログイン処理を作りました。 No.68 DBでユーザー管理、ログイン処理(復習で作成) http://www.ken3.org/backno/backno_asp14.html#68 自動でログインできたらいいなぁ・・と思い、探ってみました。 And だいぶ前に読者から下記のヒントもらっていたので(感謝) In message "リンク クリック", しょうもさん wrote... >[ VBAで楽しくプログラミング No.071 ] 2003/05/06 火曜日 より > >> 読者からの要望は、広告自動クリックソフトだったけど > >その名の通り、Clickメソッドが使えますよ。 >今回も、IHTMLElementオブジェクトを操っています。 >「Microsoft HTML Object Library」参照設定です。 > >'----------- > Dim objElement As IHTMLElement > Dim strTempText As String > > For Each objElement In objIE.Document.all.tags(tagName:="a") > strTempText = objElement.getAttribute _ > (strAttributeName:="href") > Debug.Print strTempText > If InStr(strTempText, "top10") Then > objElement.Click > Exit For > End If > Next ------------ そんな感じの三流君書いてみようポイントが貯まって(←何それ?) 今回の発行となりました。 ※今回の自動ログイン処理、まだまだですが、  応用すれば、1日一回の人気投票システムなどにも応用可能かなぁ。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba097.lzh にtest097-Book.xlsが保存されています。

/* * 2.IEのオブジェクトを作成、操作する */

インターネットエクスプローラー(IE)を起動するには、
Sub ie_test()

    Dim objIE    As Object  'IEオブジェクト参照用

    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    
    objIE.Visible = True '見えるようにする(お約束)

End Sub
ExcelやAccessの起動でお世話になっている、 CreateObjectを使用して、 "InternetExplorer.application" を作成してます。 その後、 objIE.Visible = True '見えるようにする(お約束) で、プロパティの可視をTrueにして、表示してます。 で、 http://www.ken3.org/cgi-bin/test/test068.html なんて、ページを表示させるには、 '文字列で指定したURLに飛ぶ objIE.Navigate "http://www.ken3.org/cgi-bin/test/test068.html" と .Navigateメソッドを使用しました。 インターネットエクスプローラーの操作 No.50 IE起動 CreateObject("InternetExplorer.application") No.52 InternetExplorer.application .document.body.innerText No.53 文字列を探す、InStr関数の使い方 http://www.ken3.org/backno/backno_vba11.html#50 No.70 InternetExplorer.application .document.all(0).innerHTML No.71 IE操作 リンク先を取出す .Document.links(i).href http://www.ken3.org/backno/backno_vba15.html#70 も参考にしてください。

/* * 3.データをセットしたい */

http://www.ken3.org/cgi-bin/test/test068.html は、見てもらうとわかるのですが、ログイン処理を行ってます。 HTMLのソースは、IEなら右ボタン・ソース表示などで表示します。 <html> <head> <title>けんぞうのへんてこな世界へようこそ</title> </head> <body bgcolor=#ffffff text=#000000> <center> <h2>けんぞうのへんてこな世界へようこそ</h2> <br> <table bolder=1> <FORM ACTION="login.asp" METHOD="POST"> USER ID:<INPUT TYPE="text" NAME="userid" SIZE="12"><br> パスワード:<INPUT TYPE="password" NAME="pass" SIZE="12"><br> <INPUT TYPE="submit" NAME="btn01" VALUE="ログイン"> <INPUT TYPE="reset" VALUE="クリア"> </FORM> </table><br> <a Href="adduser.asp" TARGET="_top">新規ユーザー登録</a><br> </center> </body> </html> です。 このHTMLフォームにデータをセットしたいと思います。 objIE.document.all とドキュメントのオブジェクトがあり、 objIE.document.all.userid.Value = "Ken3" 'ユーザー名 objIE.document.all.pass.Value = "aaa" 'パスワード と、フォームの項目名を使用して、アクセスすることが出来ます。 HTMLのフォームのNAMEがポイントです USER ID:<INPUT TYPE="text" NAME="userid" SIZE="12"><br> パスワード:<INPUT TYPE="password" NAME="pass" SIZE="12"><br> Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop と、 .Busyを見て、 読み込み完了まで待つ処理を追加して、 指定HPの表示、ログイン情報の代入を行ってみます。
Sub ie_test()

    Dim objIE    As Object  'IEオブジェクト参照用

    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    
    objIE.Visible = True '見えるようにする(お約束)

    '文字列で指定したURLに飛ぶ
    objIE.Navigate "http://www.ken3.org/cgi-bin/test/test068.html"

    '表示終了まで待つ
     Do While objIE.Busy = True
         '何もしないループ(笑)
         DoEvents
     Loop

     '項目名を指定して、データをセットする
     objIE.document.all.userid.Value = "Ken3" 'ユーザー名
     objIE.document.all.pass.Value = "aaa"    'パスワード

End Sub
無事、データがセットされました。 ( )

/* * 4.ログインボタンをクリックしてみる */

さてと、無事データがセットされたので、 今度は、自動でログインボタンを押してみたいと思います。 <FORM ACTION="login.asp" METHOD="POST"> USER ID:<INPUT TYPE="text" NAME="userid" SIZE="12"><br> パスワード:<INPUT TYPE="password" NAME="pass" SIZE="12"><br> <INPUT TYPE="submit" NAME="btn01" VALUE="ログイン"> <INPUT TYPE="reset" VALUE="クリア"> </FORM> のボタンには、NAME="btn01"と名前が付いているので、 'データせっとできたので、 'ボタンを押してみる objIE.document.all.btn01.Click 'クリックメソッドを実行 と .Clickのメソッドを実行してみました。 ※HTMLのフォームで、項目にNAME=と付いていたので(付いていれば)、  比較的楽に操作可能です
Sub ie_test_click()

    Dim objIE    As Object  'IEオブジェクト参照用

    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    
    objIE.Visible = True '見えるようにする(お約束)

    '文字列で指定したURLに飛ぶ
    objIE.Navigate "http://www.ken3.org/cgi-bin/test/test068.html"

    '表示終了まで待つ
     Do While objIE.Busy = True
         '何もしないループ(笑)
         DoEvents
     Loop

     '項目名を指定して、データをセットする
     objIE.document.all.userid.Value = "Ken3" 'ユーザー名
     objIE.document.all.pass.Value = "aaa"    'パスワード

     'データせっとできたので、
     'ボタンを押してみる
     objIE.document.all.btn01.Click  'クリックメソッドを実行

End Sub
こんな、短いプログラムで、自動ログイン処理が可能です。 ※なんとなく、オールスターの自動投票処理も簡単に出来るかもしれませんね。 データの中身を変えたりして、テストしてみてください。

/* * 5.終わりの挨拶 */

なんとか、動作したけど、エラー処理がまだまだ甘かったりもします。 ホントは、悪魔のささやきは、 サンプルプログラムでテストと言いつつ、 広告をクリックさせて、、ともフト思ったけど、 そこまでしてもなぁ・・と考え直して(笑) 普通の自分のページを使ったログインのサンプルにしました。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba097.lzh にtest097-Book.xlsが保存されています。 なので、安心して、サンプル実行してください。 ※まだ、サンプルファイルに細工して・・までは心は腐っていなかった(笑) なんて、物語を書いてるが、ホントのホントは、 広告クリック作ろうとしたんだけど、 広告の<IFREAM>内の参照(解析)に手間取ったとか? ギク・・なんでバレたの? ボクも自動クリック処理作ろうとしてるからさ(笑) ※たぶんあれだよ、、と思った人も多いと思います。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。

動作しないとメッセージをいただく

>webに掲載されていましたwebの自動ログインのソースをそのままコピーして

>実行してみました。そしうしましたところ、IEが立ち上がり、

>"けんぞうのめんてこな世界"が表示され、

>IDおよびパスワードの蘭にデータが自動で入力されず、

>下記のメッセージが現れました。何が原因でしょうか?

>

>オートメーションエラーです。エラーを特定出来ません。
ie.Document.documentElement.innerHTMLがエラーになります。
>エクセルのバージョンは2000です。バージョンが古いのでしょうか?

原因は表示待ち?かなぁ。

こんにちは。
自分のテストページで こけているので 恥ずかしいのですが、
表示待ちができていないと思います
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
こんな感じでエラーが発生していると思います。
http://www.youtube.com/watch?v=mTZOKAXSzBM
Sub ie_test()

    Dim objIE    As Object  'IEオブジェクト参照用

    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    
    objIE.Visible = True '見えるようにする(お約束)

    '文字列で指定したURLに飛ぶ
    objIE.Navigate "http://www.ken3.org/cgi-bin/test/test068.html"

    '表示終了まで待つ ※表示待ちができていない。
     Do While objIE.Busy = True
         '何もしないループ(笑)
         DoEvents
     Loop

     '項目名を指定して、データをセットする
     objIE.document.all.userid.Value = "Ken3" 'ユーザー名
     objIE.document.all.pass.Value = "aaa"    'パスワード

End Sub
ここ
    '表示終了まで待つ ※表示待ちができていない。
     Do While objIE.Busy = True
         '何もしないループ(笑)
         DoEvents
     Loop
で、表示待ちができていないので、 .ReadyState プロパティ http://ken3-info.blog.ocn.ne.jp/objie/2009/06/readystate_1393.html を追加で見る(条件に入れる)といいみたいです。
    While objIE.ReadyState <> 4 'READYSTATE_COMPLETE = 4
        DoEvents     'Doeventsは重いので嫌いな人居るけど
    Wend
みたいな感じで、追加してみます(Orで条件を見てみます)
Sub ie_test()

    Dim objIE    As Object  'IEオブジェクト参照用

    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    
    objIE.Visible = True '見えるようにする(お約束)

    '文字列で指定したURLに飛ぶ
    objIE.Navigate "http://www.ken3.org/cgi-bin/test/test068.html"

    '表示終了まで待つ ※表示待ち .Busyか.ReadyStateが4以外
     Do While objIE.Busy = True Or objIE.ReadyState <> 4 'READYSTATE_COMPLETE = 4
         '何もしないループ(笑)
         DoEvents
     Loop

     '項目名を指定して、データをセットする
     objIE.document.all.userid.Value = "Ken3" 'ユーザー名
     objIE.document.all.pass.Value = "aaa"    'パスワード

End Sub
変なサンプルでご迷惑をおかけしてスミマセン。
無事に動くことを願いつつ、失礼します。 三流プログラマー Ken3

ページフッター リンクや広告、質問送信など

三流解説を読んでいただき、どうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。

[三流君 VBAでWebBrowser IEを操作する] / [三流君 VBAで楽しくプログラミング] / [AB型の変わり者 三流プログラマー Ken3 三流君Top]

大分類:[Document.Forms(入力処理)] / [Document.Links(リンク情報)] / [Document.Images(画像情報)] / [Document.Frames(フレーム処理)]
サンプル・例題:[過去のメルマガ記事一覧] / [少し大きなIE操作サンプル] / [小さなコードでIE操作の動作確認]

F1でヘルプを見たり、デバック時にDebug.Print使ったり、イミディエイト ウインドウで簡単な確認したり。
なれると当たり前に操作している方法が↓かなぁ。
[F1ヘルプ マクロ記録ほか]・・・基本のF1を押してヘルプを見る方法など
[実行時エラー、デバッグモード]・・・デバッグの流れを簡単に(ハマった時はツライけど)
[イミディエイト ウインドウ と Debug.Print]・・・プログラム作成時に便利なイミディエイト ウインドウ
[VBA ウォッチ式とSTOPを使ってみた]・・・STOPで止め、ウォッチ式でオブジェクトの中身を確認する方法など
[参照設定のお話]・・・設定すると便利な(設定しないと使えない)、参照設定のお話

項目別に↓にプログラマーの本音?それとも建て前?的な記事をまとめました。お探しのジャンルを選択してください。
[プログラムは心? spirit]・・・プログラマー 心・気質・魂
[学ぶ study]・・・学習、技術の取得
[仕様書 doc]・・・仕様書・設計書関係の話

項目別に↓に人気の記事をまとめてみました。お探しのジャンルを選択してください。
[VBAでIE ウェブブラウザーを操作]・・・VBAでIE,WebBrowserを操作する サンプルです
[MSアクセス から エクセル を呼ぶ Excel.Application]・・・AccessからExcelを操作したりデータの書き出しなどです
[アウトルック メールの操作 Outlook.Application]・・・VBAからOutlookを使い、メール関係を処理するサンプルです
↑上記3つみたいなCreateObjectで他のアプリケーションを操作するサンプルが人気です。

Excel関係:
[エクセル ユーザーフォームを操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[エクセルからアクセスを操作する]・・・ExcelからAccessのマクロを起動してみました、
[エクセル関係 関数、その他]・・・その他Excel関係です

Access関係:
[アクセス ユーザーフォーム/サブフォーム 操作]・・・アクセスでフォームを使ったサンプルです
[アクセス レポート操作]・・・レポートを操作してみました
[アクセス クエリーやその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です

その他:VBAの共通関数やテキストファイルの操作など
[テキストファイルの操作(Open,Close,Print,Input)]・・・普通のテキストファイルを使ったサンプルです

Blog:[三流君の作業日記]/ [objIEを使用したサンプルコードを見る]/ 広告-[通販人気商品の足跡]

質問や要望など メッセージを送る(三流君に連絡する)

三流プログラマーのKen3 が 皆さんの質問にお答えします
と カッコつけて言っても、実力不足ですべての質問に回答することはできないのが現実なのですが、できる範囲で 三流的な逃げ手 や 解決方法 を探します(回答します)。

感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。

あなたのお名前(ニックネーム):さん
返信は?: 不用(HP更新を待つ) , E-mail→ アドレス:に返事をもらいたい



(感想や質問・要望 メッセージはHPで記事に載せることがあります。)

急ぎで連絡がほしい、そんな時は:[三流君連絡先]に連絡してください。



[トップページへ 戻る] / [VBA TOP] / [WebBrowser IEの操作 TOPへ]