※このメルマガを書いてた時期はXP+IE6でした。Set objIE = CreateObject("InternetExplorer.application")で比較的簡単にIEを起動することができました。
上で、比較的簡単にIEを起動することができますなんて言っておきながら、
現在の環境(2008年5月) Windows Vista のIE7だと、ハマってしまいます。(不評の動画解説3連発 ア.[Windows Vista IE7 CreateObjectで失敗した画像] イ.[Vista IE7 信頼済みのサイトにしてVBAからコントロールしてみた] ウ.[UserFormにIEを貼り objIEに代入してかわした方法です。])
私がよく使う好きな方法はそのままでは、Vista IE7には通用しないのかぁ、、、
原因は、Set objIE = CreateObject("InternetExplorer.application")で.Navigateすると、
Windows Vista IE7の保護モードだと新しいIEが起動して制御不能になってしまいます・・・[三流君 Vista IE7の修正でハマる(小細工で逃げる)] ← これから Vista IE7に挑戦する人は、こちらも見てください。
※※あっ、IE6はそのままサンプルが動くと思います、頭からお騒がせしてスミマセン・・
※※※最新の情報(と言っても更新遅いですが)は、[三流君VBAでIE操作・自動制御]に載せているので合わせて見てください。
<InternetExplorer.application .document.all(0).innerHTML>
こんにちは、三流プログラマーKen3です。 今回は、 掲示板に質問があった、 彼女のすべてをのぞきたい、全てを取得したい。 じゃなくって、 IEでHTMLソースすべてを取得したい です。 溜まっているオヤジギャグは置いといて、はじめますか? (何が溜まっているって?駄目だよ変な想像したら・・・ 想像したのがたぶんあたりだけど、と回答を書かないのがKen3流の文章)/* * 1.今回のキッカケ */
掲示板、 http://www.ken3.org/cgi-bin/bbs/vba/wforum.cgi?mode=allread&no=111&page=0 に来た質問です。※何か質問あったら遠慮なく、回答遅いけど。 --- >投稿時間:2003/05/02(Fri) 19:13 >投稿者名:nori >タイトル:はじめまして > >はじめまして。 >早速ですが、vba解説のNo.50 IE起動に関する質問があります。 > >Dim objIE As ObjectobjIE.Navigate "http://..." >Dim strHTML As String >strHTML = objIE.document.body.innerHTML > >でhtmlソースを取り出す事は出来ましたが、<body>内しか取り出せません。 >objIE.document.title >で<title>内も取り出せることは分かりましたが、<head>内すべてを取り出す事 >は出来るのでしょうか? >htmlにあまり詳しくないもので、解決しません。そもそも、<html>内は取り出 >せなくて当たり前なのでしょうか。愚問かもしれませんが、お返事よろしくお >願いします。 --- さて、やりたいことを整理して、 と思ったら、もう整理されてますね。 ・<head>内のソースを取得したい ・htmlの全てのソースを取得したいかぁ。/* * 2.IEオブジェクトの中身を探れ(手ごわい彼女の心の中?) */
[No.50 IE起動 CreateObject("InternetExplorer.application")] ( http://www.ken3.org/backno/backno_vba11.html#50 を参照) では、IEの起動方法を書きました。 [No.52 InternetExplorer.application .document.body.innerText] ( http://www.ken3.org/backno/backno_vba11.html#52 を参照) では、 彼女(オブジェクト)の中身を探る方法を少し書きました。 それにしても、階層が深いです。 テーブル系のオブジェクトを探すが、なかなか見つからない。 (女の子じゃなくって、IEの心の中は複雑なのね、、、) 女心を探るのは下手だけど、オブジェクトの中身見るのは少しできるよね? なんて、馬鹿なこと言ってないで、ブレークポイントをはって、止めます。 いやらしい目で頭から探っていくと(ほんとは真剣な目ですよ) objIE.document.の下に、 .allなんてそれらしいのあるじゃないですか。 読者の人に見せたくないニャっとした顔で、 ? objIE.document.all(0).innerHTML とやってみると、ヘッダから情報が入ってました。 これを使えばなんとかできそうです。 下記Ken3がいやらしい目で見てたIEのオブジェクト![]()
/* * 3..document.all(0).innerHTMLにいつも入っているのか?疑問だけど */
.document.all(0).innerHTML と 0番目にいつも入っているのか?疑問だけど、 下記のようにテストしてOKでした。
Sub ie_get_html()
Dim objIE As Object 'IEオブジェクト参照用
'インターネットエクスプローラーのオブジェクトを作る
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True '見えるようにする(お約束)
'ランキングのページに飛ぶ
objIE.Navigate "http://www.ken3.org/cgi-bin/lime/limemgr.cgi"
'表示されるまで待つ、10秒後にエラーを判断する
Dim time10 As Date '時刻格納用
time10 = DateAdd("s", 10, Now()) '現在から10秒後を計算
Do While objIE.Busy = True 'ビジー、読み込み中の間
DoEvents
If time10 < Now() Then '10秒経過したか?
MsgBox "タイムアウトです"
Exit Sub
End If
Loop
'HTMLソースを取出す
Dim strHTML As String
strHTML = objIE.document.all(0).innerHTML '変数に代入
MsgBox strHTML 'テスト表示
Debug.Print strHTML 'イミディエイトにも表示
End Sub |
| ※種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。 お奨め本の目次を見るだけでも勉強になったり |