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)] |
全ての質問には、答えられませんが、リクエストや質問があったら、[作者(三流君)に質問する] から 気軽に送ってください
挨拶:VBAで(ExcelやAccessなどから)InternetExplorer WebBrowserを操作してみたいと思います。
ここでは、最近見かけなくなった?フレームページの操作について、少し書いてみます。
※SEOで不利?とかで、最近はフレームを採用したページが減ったけど、SEO気にしないTOPページ以外は、証券会社の発注画面などで多く使われているみたいですね。
※※一画面に(1HTMLファイルに)、同じヘッダー・フッター、ロゴを読み込むよりは、フレーム分けして、内容だけ更新したほうがServerに負荷が少ないから、証券会社の発注ページではFrameを使ったページが多いのかなぁ?と勝手な予想。チリも積もればで、同じ内容をHttpで送信すると莫大な通信量になるし。
先に
VB2010のWebBrowserを使いブラウザを操作したい。 VB2010を使用.. - 人力検索はてな↑を見てください。
http://q.hatena.ne.jp/1314392493#a1097389
操作動画 http://www.youtube.com/watch?v=P-FC3baJkzo です。
↑こんな感じで、デバック、してます。※わかっててやっているから、で、いきなりこのコードは書けないんだけど、、、
元の質問、[QA20110523 VBA IE操作、フレームの操作をデバック] を見る
簡単な、基本の2分割から探ってみます
汚い手で女の子に触れると嫌がられる? じゃなくって、 いつも、私は手抜きで、AS Objectとやっているので、 なぜExcelもIEも同じAs Objectなのか?と質問 いっぱいもらうので、 今日は、皆さんが好きな、型をキチント指定して作ってみます。 自分で打ち込みながらやったほうが、力になるので(手抜きの言い訳ですが) まず、参照設定を行います。 参照設定では、MicroSoft Internet Contorlsを選択します。 (※見つからない場合は Microsoft Browser Helpersがあると思うので設定してください) 次に、変数を宣言します。 dim objIE as と打ち込むと、リストから選択できます。 ここで、 Dim objIE As InternetExplorer と選択します。 ↑選択イメージ そんな感じで、いつもの型が不明のObject型から、 As InternetExplorer と 型を指定してみました。 あとは、普通にオブジェクトを作って代入します。 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") まぁ、いつも通りですね。 参照設定をしていると、ここからチト違うのが、 objie.と打ち込むと、プロパティ、メソッドが表示されます。 objIE.Visible = True もコーディングするのが比較的楽です。 さてと、だったら、Excelのように簡単にいくかなぁ・・・ と思ってたら、ガイドしてくれるのもここまでで、 objIE.Document. ここまではOKなのに、 Document.と入力しても何も出てこない。 しかたない、F1押しますか、 あらら、いつものヘルプが出ない・・・ う〜ん、どうしましょう・・・
みなさんはF2のオブジェクトブラウザって使ったことありますか? F2を押します(F1の隣って、あたりまえか) すると、オブジェクトブラウザって画面が表示されると思います。 全てのライブラリから、 SHDocVwを選択します。 すると、 InternetExplorerのメンバーまでは見れるけどその先がまだ見れない・・・ ↑InternetExplorerのメンバーまでたどりついた。 まだ何か足りないのね、参照設定でそれらしき物を再度探す。 と、 MicroSoft HTML Object Labrary なんてのがあるじゃないですか。 ※いままで、見逃してた・・読者の皆さんスミマセン。 ↑やっと探し当てた、MicroSoft HTML Object Labrary 中身を確認してみると、(F2のオブジェクトブラウザで) MSHTMLとライブラリを選択、 クラスは、HTMLDocumentを選択すると、 おっ、よく見かけた.Allなんかも出てくるし、 スクロールすると、 framesなんてメンバーが存在する。 ^^^^^^ これをクリックすると、 Property Frames AS FramesCollection 読み取り専用 HTMLDocumentのメンバ なんて感じの説明とリンクが出てくる。 ↑HTMLDocumentのframesを選択した画面 まだまだ不明なので、 次に、リンク先のFramesCollectionをクリックして探ってみると、 Class FramesCollection MSHTML のメンバ だってぇ? オイオイ、頭に戻ったか?(循環参照か?ヘルプのたらいまわし状態?) でも、FramesCollectionは、 Item と length をメンバーとして持っているのがわかった。 ↑FramesCollectionを選択した画面 Itemは、HTMLを表すのかぁ。 ^^^^^^^^^^^^^^^^^^^^^^^^^^ ※まぁ、よく考えてみれば、フレームの先はHTMLのドキュメントなので、 作りはOKなんでしょうね。 index.html でフレーム分割、 a.html と b.asp を表示してれば、 index.htmlのフレーム要素(ITEM)は2個(length)です。 ITEMの中身はHTMLドキュメントって言ってるよ、 そりゃそうか、フレームで分割されていても、 item(0)はa.html item(1)はb.aspなんだから、 フレームのアイテムは、HTMLドキュメントと言ってるのは。 ↑ゴメンなさい、少し文章変ですよね。
日本語、私、うまく書けないので、 みなさんと共通に話せると思う、 VBAって言語を混ぜて説明するので、 聞いてくださいね。 オイオイ(笑)単なるソースを紹介って言えよボケ。 簡単なIE関係の型を使った解説を始めます。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ まず、普通のフレーム無しのHTMLから。 http://www.ken3.org/cgi-bin/test/test068.html がログインの処理画面です。 ユーザー名にKen3 パスワードにaaa と入力してみます。 test068.htmlのHTMLソース(途中まで)は、 <html> <head> <title>けんぞうのへんてこな世界へようこそ</title> </head> <body bgcolor=#ffffff text=#000000> <center> <h2>けんぞうのへんてこな世界へようこそ</h2> <br> <table bolder=1> <FORM ACTION="test068-1.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="test068-2.asp" TARGET="_top">新規ユーザー登録</a><br> </center> <br> ・ ・ と USER ID:<INPUT TYPE="text" NAME="userid" SIZE="12"><br> パスワード:<INPUT TYPE="password" NAME="pass" SIZE="12"><br> が、入力エリアです。 これに対して、(このHTML入力フォームに対して) 入力処理で下記のプログラムを作りました。 No.105 VBAからIE操作 .document.forms(0).Submit でフォーム送信処理 http://www.ken3.org/vba/backno/vba105.html では、
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" 'パスワード 'フォームをSubmitする objIE.document.forms(0).Submit End Sub |
Sub ie_test() Dim objIE As InternetExplorer '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 'ドキュメントオブジェクトの代入 Dim objDOC As HTMLDocument 'HTMLドキュメント Set objDOC = objIE.Document '項目名を指定して、データをセットする objDOC.all("userid").Value = "Ken3" 'ユーザー名 objDOC.all("pass").Value = "aaa" 'パスワード End Sub |
Sub ie_fream() Dim objIE As InternetExplorer 'IEオブジェクト参照用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) '文字列で指定したURLに飛ぶ objIE.Navigate "http://www.ken3.org/vba/test116.html" '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop Dim objFRAME As FramesCollection Set objFRAME = objIE.Document.frames 'フレームの代入 Debug.Print "フレームの数は" & objFRAME.Length 'ドキュメントオブジェクトの代入 Dim objDOC As HTMLDocument 'HTMLドキュメント Set objDOC = objFRAME("F_RIGHT").Document 'フレームのドキュメントをセット '↑objFRAME(0).DocumentやobjFRAME(1).Documentもアリです 'Set objDOC = objFRAME(1).Document 'フレーム(1)をセットでも動きます '項目名を指定して、データをセットする objDOC.all("userid").Value = "Ken3" 'ユーザー名 objDOC.all("pass").Value = "aaa" 'パスワード End Sub |
複数フレームの処理を書く
上下や左右の単純な2分割じゃなくて、証券会社のページは分割の分割・・になってます。
基本は、2分割の応用で、
ここからした、サンプルを作って、速めに書き込む
※現在作成中です、少々お待ちを。
入り口を間違えないで、みなさんは参照設定から行ってくださいね。
※まだまだ、確認すること、やることいっぱいだぁ。。。
過去のメールマガジンのリンクが長かったので、下記に移動しました。
[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で楽しく] / [記事一覧] |
カスタム検索
|