挨拶:VBAで(ExcelやAccessなどから)InternetExplorer WebBrowserを操作してみたいと思います。
呪文のような Set objIE = CreateObject("InternetExplorer.application")でVBAからIE操作を楽しんでください・・・
IEのサポートがWindows11で完全終了してしまいましたね。(2021/10/05冒頭に追記)
そんな感じで下記の質問が来たので対応策の参考になれば
下記いただいた質問
>ExcelVBAでデータを集め、競輪予想を作っています。
・
・
・
>さて最近、IEのサポート終了が告知されていますが
>WEBからのデータ取得はどのような対処がベターなのでしょうか?ご意見をお聞かせください。
ベター、ベスト、イロイロな考え方がありますが、
1.MSXML2.XMLHTTP などでHTMLを取得して、CreateObject("htmlfile") を使う
下記の例題動画、なんだか私の解説はイマイチだった・・・やはり、素直にSelenium VBAなのかなぁ。
と思いつつ、冒頭で Set objHTML = CreateObject("MSXML2.XMLHTTP")
でHTMLを取得して、使ったサンプルを紹介してみたり
IEサポート終了後の世界 MSXML2.XMLHTTPとCreateObject("htmlfile")を使用してJRAオッズ取得 ワイドのオッズ取得に挑戦してみた
目次
10:08 2.ワイドのオッズを押す
11:55 2.1 strレースを探し、頭出し?
18:47 3.オッズのテーブルを判断して、Excelにワイドオッズを取得
21:37 3.1 tableのcaptionで判断
28:30 4.ワイドの一番人気を探す
31:17 元に戻って、2.4 2回目以降は、レースを選択
他の動画を見る(YouTubeで再生リストを見る)
↑も参考になれば・・無事に移行できるといいですね。 三流プログラマー Ken3
※ソースコードは[MSXML2.XMLHTTPとCreateObject("htmlfile")を使用してJRAオッズ取得]を見てアレンジしてください。
はじめは[WebBrowserを参照設定]から入り [VBAでIE操作解説]やってます。 よく使う.Document:の解説から [.Forms]で入力処理 [.Links]でリンク情報取得 [.Images]で画像の情報 [.Frames]でフレーム処理 [.Script]でスクリプト処理 ...など、まだまだ抜けてますが、 |
手探りで[ヘルプ IEのオブジェクトを探る] IE,WebBrowser: [IE プロパティ(各種設定)] [IE メソッド(イロイロな動作)] [IE イベント(発生後処理)] |
[VBAでIE操作(TOP)] 小さな[IE操作のサンプル]でTEST 次に[少し大きなIEを使ったサンプル] にチャレンジしたり [IE関係記事一覧] [VBA(TOP)] [三流君(TOP)] |
全ての質問には、答えられませんが、リクエストや質問があったら、[作者(三流君)に質問する] から 気軽に送ってください
処理のパターンは、
1.オブジェクトの作成・・まずは、IEを起動したり、起動済みのIEを捕まえたり
2.ページを表示させる・・次は、処理したい目的のページを表示させます。
3.データを取得したり、セットしたり、HTML文章 .Documentの処理
3.1 次のページ や 新しいウインドウの処理 ・・ リンクから次ページに飛んだり、フォームにデータをセットして送信・登録したり。検索データをセットしたり。
3.2 ↑で、次のページに処理が移り、3へ戻る(繰り返す)
4.終了処理
そんな感じかなぁ※おおざっぱ過ぎだろ・・・
下記の動画で設定方法・テスト方法のさわり、初めの一歩を少し実演してみました
※まぁ、↓これを貼り付けて、実行してみてください
|
脱線した、話を戻して:
今から書く リニューアル後のページも捨てたモンじゃないぞ(手前味噌・自分で言うなよ(笑))
まずは、IEを起動したり、起動済みのIEを捕まえたり、
処理するオブジェクトを作ります
初めの入り口は 大きく2つじゃないですが、
ア.Set オブジェクト変数 = CreateObject("InternetExplorer.Application")
オブジェクトを変数に代入してから オブジェクト変数.メソッド 変数.プロパティ みたいに使う方法
※あっ忘れてた、0番目本当の一番初めとして、ぜひWebBrowserの参照設定→ [VBAから IEを使うための 参照設定の方法] を 初めに見てください。※※特にこれから始める人は。
次の方法は、
イ.ExcelのUserFormにWebBrowserのコントロールを貼り
コントロール名.メソッド コントロール名.プロパティ
※実際の貼り付け方、手順は [番外編 Excel UserForm に IEを貼る] を 見てください。
最後、表示させない方法もあって(少し特殊ですが)
ウ.As HTMLDocumentと.createDocumentFromUrlで文章を読み込み
MSHTMLを参照設定後、As HTMLDocument で変数を定義して、.createDocumentFromUrlでHTML文章を読み込みデータを取り出す。そんな方法もあります。
詳細・手順は[MSHTMLを参照設定後、As HTMLDocument と.createDocumentFromUrlで文章を読み込み使うテスト]を見てください。
※↑は、Documentの操作に慣れてきたら使ってみてください。初めは画面が表示されていた方がテストやデバック時に便利だと思います。
まぁ、どれから入っても .メソッド .プロパティ を 探らないといけないのですが。。
新規にCreateしないで、今表示されているIEを使ったり、新しく起動したIEを使いたい、そんな場面・処理があると思います。
思いつくのが、CreateObjectと対になるGetObjectを使用して、GetObject("InternetExplorer.Application")で表示済み・起動済みのIEを使用できれば簡単なのですが、なぜかうまくいかなかったので(もしかして私のミスかも)、最近は違う方向から攻めてます(別な方法を使ってます)。
ア.パターン的にCreateObject("Shell.Application")から表示されているIEを探してます。
百聞は一見に~三流君はこんな取得方法を使ってます。
起動済みIE、操作済み、既存の表示済みWEB画面を操作したい そんな時は、
ソースコードと簡単な解説は [XXXXさんへ 起動済みIE、操作済み、既存の表示済みWEB画面を操作したい]を見てください
イ.新しくIEからスクリプトで開かれたIEなどを探す
Set newIE = objSHELL.Windows(objSHELL.Windows.Count - 1)
↑新規で起動した IE が 必ず・絶対に一番後ろと決め付けて組んだプログラムです。(プログラマーに絶対は無いだろクソ三流って感じですが・・・)
次は、処理したい目的のページを表示させます。
.Navigate の メソッドにURLを渡したりして、実行します
objIE.Navigate "http://www.google.co.jp/" 'こんな感じでGoogleのページを表示
ページの表示.Navigateのメソッドを使う
ア.単純に指定したURLを開く ページの移動 目的のページを表示する objIE.Navigate "http://www.xxxx.xxx/" 文字列でURLを指定するだけです。 |
イ.第二引数 Flagsを指定して隣のタブでURLを開く objIE.Navigate2 "http://www.xxxx.xxx/", &H800 '新しいタブで表示 2048(16進数で800) ※.Navigate2←2に注意 |
表示を待たないと、表示待ちを入れないで いきなりオブジェクトに触りに行くと(ドキュメントなどのオブジェクトにアクセスすると) 相手の心の準備ができていないみたいで(オブジェクトの展開処理が間に合わないみたいで)、どこ見てんのよ(古)と怒られるじゃなかった、実行時エラー -2147467259 (80004005) Document メソッドは失敗しました ・・・など、エラーで怒られるんですよ。
なので、objIE.Navigate のページ移動後に相手の準備ができるが確認します。
私がよく使っている方法は、
While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。
DoEvents
Wend
みたいに、.Busy と .ReadyState の状態を見てます
そんな試行錯誤は、
・[.Busy プロパティ の テスト IE操作]
・[.ReadyState プロパティ の テスト IE操作]
を見て笑ってください。
HTMLはタグに囲まれた文章なので、タグを指定してから、
.InnerTEXTや.OuterHTMLでデータを探ってみたり
[↑IE操作 基本?をYoutubeで大きくみる。]
[動画で使用したソースコードを見る]
Document 文章の処理なので、大きく分けると、下記のような感じになります
ほんとに、基本動作の骨組みだけのサンプルです。肉付けして皆さんが活用できると使えるといいなぁ・・・
※初めは、参照設定から設定して、単純な表示から遊んでみてください。
'参照設定 Microsoft Internet Controls(Microsoft Browser Helpers)
'Microsoft HTML Object Library の 2つを忘れずに
'参照設定の方法は、 http://www.ken3.org/cgi-bin/group/vba_ie_object.asp をみてください。
|
↑単純に表示しただけなので、ここから先が長いのですが、、、
百聞は一見に~こんなことができます。
意外と、解説を聞くよりも現物・動くサンプルコードを見た方が速かったりします。
解説は後回しで、論より証拠?:動くサンプルから紹介
デバックなどの解説リスト→:[デバッグ 三流プログラマーが右往左往]
単体のテスト動画など→:[Web Browser IE操作 インターネットエクスプローラ]
下記、手前味噌ですが、アクセスの多いサンプル例です。何かの参考となれば
連続実行の注意?を含めて、入り口はここから?
[ExcelのA列の単語を翻訳サイトにセット取得を自動で連続実行]
で、1.webページの表示 2.データのセット 3.ボタンを押す 4.結果の取得 と 流れはそろっていたりするので、チェックが多いです
あとは、
・[Excel A列の値(本タイトル)をWebブラウザーにセットする]
・名前の付いた表を取り込むには、[VBA IE操作 表の取り込み(質問 CMEのデータ取得について)]
・乱暴に[VBA IE操作 サイトを全選択してEXCELシートへコピーアンドペーストにチャレンジ]
・データ登録系[ブログ(blog)にデータを登録する]
↑など、動くサンプルがあるので使ってみてください。
質問で多いログイン系の処理は
ログインサンプルとして
・[VBS で IEを使用して楽天市場にログインしてみた]
・[VBS IE操作で alt=のボタンを探して押す方法]
・[VBS IE操作でBlogにログイン ブログの入力・登録処理]
・ログインとデータ取得[JRA IPATのページから単勝の表を取り込む]
[JRA IPAT操作関係?]
を参考にして 探り方や処理をみてアレンジしてください。
など、少し書いたので、何かの参考となれば・・・
手前味噌のサンプルとリンク:
・[過去のメルマガIE記事]・・・メルマガで書いた記事。こっちが好きな少数派も居たりして?
・[IEを使った三流サンプル] ・・・ 少し長めのサンプル
や
声がうわずって、[え~と]、[こんな感じ] の単語連発で 間が悪く 聞き取りにくい
・[恥ずかしい解説動画(VBA IE動画解説)]・・・YouTubeに解説、操作動画アップしてます。
さらにひどい、
読者説明よりも SEOが目的 なのか知らないが、
・[変なブックマーク(WebBrowser系)]・・・はてなブックマーク使ってみました。使い易いですね。
イロイロな処理の中で多いのが、表の取り込みです。
・Webから表 TABLE データを取り出したい(Webクエリーがあるけど、自分で取得したい)
そんな処理のサンプルは↓
[VBA IE Webページの表を取り込む]
↑手前味噌サンプルですが、表の取り込みでアレンジして使ってみてください。
・Webページからファイルをダウンロードしたい、
名前をつけて保存 や 対象をファイルに保存、そんな操作時は、
[No.120 URLDownloadToFile APIを使用してWebからファイルをダウンロードしてみた]
を見てください。APIと言ってますが意外と簡単ですよ(キャッシュの問題があるけど)
・JavaScriptから出力される Aleatやconfirm の確認・メッセージ などで処理が止まる。OK はい などを押したいけど、何かいい方法ありませんか?
と、質問をいただく。
最近よく見かけるコードは、
objIE.navigate "JavaScript:function alert() { return true; }"
みたいに、.navigateに書くJavaScriptでつぶす方法を見かけたり。
動画をYoutubeで見る→[https://www.youtube.com/watch?v=9qhaHPTjNSU]
ソースコードは[XXXXXさんへ IE操作「Webページからのメッセージ」(Javascriptのalert)を消す方法]
少し前は、変な方向でアプローチしてました、コチラも参考になれば。
読み込んだページに 小細工で同名の関数を.createElement SCRIPTで作成して、.appendChildで追加そんな感じです。
※ポップアップメッセージを動作させない、そんなセコイ方法です。
三流解説は
[暗証番号入力 confirm確認メッセージを無効にする JRA入出金メニュー]や
[VBA IE操作 ニセのpromptとalert を 挿入する そんな実験]を試してみて試して下さい。
まぁ、↑はかなりセコイので、プロはこっちかなぁ?↓
VBAでHTMLのページ内でJavaScriptのConfirm関数で表示されるメッセージのボタンを自動的にクリックする
http://q.hatena.ne.jp/1248657374
↑で、
ポップアップウインドウの件が解決してるみたいです。
こちらを参考にして、作成してみてください。
※私も精進しなくては、、、と思いつつ、最近は、何も進んでいなかったり。。。
Q.IEはいつなくなっちゃうか?不明なので不安
A.seleniumなど他の自動操作系を触ってみては?
https://www.google.com/search?q=selenium
↑検索してみると、いろいろと出てくると思います。
いろいろと攻略していない未解決や問題点があって
・画像を自動でアップしたいので INPUTタグTYPE FILEにファイル名を入れたい。
↑これも、セキュリティを突破できてません。
全ての質問には、答えられませんが、リクエストや質問があったら、
[作者(三流君)に質問する] から 気軽に送ってください
ページの作りや情報のまとめ方がヘタなので、重複していたり、ほしい情報が隠れていたり...
無事に情報が見つかることを願いつつ、大分類・目次の紹介から始めます。
さて、IE操作 Documentの森・WebBrowserの山を頼りないガイドの三流君と一緒にさまよってみましょうか!!!
このページ 三流プログラマー的解説がIE操作方法(プロパティやメソッド)の入り口として何かの参考・お役に立てれば幸いです。
1.参照設定はじめは[WebBrowserを参照設定]で設定すると、プログラム作成時に .(ドット)を押すとプロパティやメソッドが表示されるのでプログラムが作成しやすいと思います。 2.Document 文章の処理IEで読み込んだページ(文章・ドキュメント)の操作なので、 F12を押して、IDやNameを探したりします 3.プロパティやメソッド、イベントについてIE,WebBrowserのプロパティやメソッド、イベントを知りたいのですが、ヘルプが付いて無いので 4.自己流ですが InternetExplorer オブジェクト プロパティ メソッド の 探り方読者の声:テメエの(三流プログラマーの) くどい説明、わかりにくいサンプル、手前味噌・自己満足のリンクを見るよりも、自分で調べるから、正式な資料やヘルプのURL と 調べ方・操作方法を書いてくれれば 自分で見て調べるからさ、さっさと教えな。 4.1 プログラム作成前準備・[参照設定] ・・・ HTML Object Library と Microsoft Internet Controls を設定しましたか?まだならぜひ初めに設定してください。 4.2 プログラム作成時・[F2を押して、オブジェクトブラウザで遊ぶ]・・・ ↑参照設定後、F2オブジェクトブラウザを使ってみたりすると面白いかも。 4.3 動かしながら、開発時、デバック時など
現物、プログラムを動作させながら(ハマりながら操作する)感じは、 4.4 ヘルプは本当に無いの?
MSDNとGoogleを検索:F1のヘルプがあれば(効けば)一番楽なんだけど、IE系の説明・ヘルプがF1を押しても出ないので |
少し、情報を整理したつもりが、読者の声を聞くとリニューアル前の方が読みやすかったと評判良かったり
一度、こちらも見て下さい。
私が弱い・横浜ベイファンなので、マシンガン打線の昔話ですが [No.138 アイツが打てたから、オレも打てる。マシンガン打線] ← アイツ(三流君)がやれたんだったら、オレも(アナタも)やれるって感じの心理で、ソフト作りや他の仕事も まぁ同じようなもんで、成功例があると自分もやればそこに行き着くことができる(やれる)
そんな↑感覚(やれる)を持ってもらいたいので、あえて動作動画から紹介します。※VBAでIE操作は簡単にできると心に暗示をかけてから、最後まで三流解説を読んでくださいね。みなさんなら必ずできます
なかなか、うまくいかなくても[プログラマー発芽の条件]は、人それぞれ違うので、私の三流解説ページが栄養(キッカケ)となって、近い未来で覚醒(発芽)してもらえるとうれしいです。
すぐに私みたいな、失敗続きの三流プログラマーを越えられますよ皆さんなら。
※私、三流君を踏み台にして、読者の皆さんは、システム開発の世界で羽ばたいて下さい。
[後輩に追い越される三流な先輩]←こんな感じで後から来た皆さんにスグに追い越されれるなぁ と思いつつ(笑)
※※三流解説・三流コードが少しでも参考になったらうれしいなぁ~
まだまだ、書かないといけないIE操作 プロパティやメソッドなどの組み合わせがあるのですが、このあたりで逃げるように失礼します(オイオイ)。更新が遅いけど温かく見守ってください 更新中 まだまだ書きかけ
いろいろな表現があって、かえって迷ってしまうかもしれませんが、数をこなすと見えてくるので、私のサンプルだけじゃなく、いろいろなサンプルを探して見てください。[番外編 GoogleでoIE,objIE,WebBrowserをKeyWordにして検索]にお勧めのキーワード検索方法を載せてます
過去のメールマガジンのリンクが長かったので、下記に移動しました。
[IE操作 メルマガ 一覧]
よろしくお願いします。
改版履歴 更新情報:過去のIE操作の解説はこちら↓(IE6+XP,IE7+XPの古い記事もアリ)
2009-12-01:[過去の解説 vba_ie_20091201.asp]
2009-06-01:[過去の解説 vba_ie_20090601.asp]
2009-02-01:[過去の解説 vba_ie_20090201.asp]
2008-05-01:[過去の解説 vba_ie_20080501.asp]
2007-08-31:[過去の解説 vba_ie_20070831.asp]
2007-05-20:[過去の解説 vba_ie20070520.asp]
2012-03-19:[過去の解説 vba_ie_20120319.html]
もあわせてみてください。
(↑もしかして書き直さない過去の解説の方がよかったかも?(笑))
せっかくホームページに来ていただいたのに、検索の紹介 ぉぃぉぃ
サイト指定や期間の指定を組み合わせて実行してみてください。
ここまで、読んでいただきどうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
感想や質問・要望・苦情など 三流君へメッセージを送る。
下記のフォームからメッセージを送ることができます。
[三流君(TOPへ)] / [VBAで楽しく] / [記事一覧] |
![]()
カスタム検索
|