VB.NETでIEに表示中のHTMLを得る方法について

このQ&Aのポイント
  • VB.NETを使用して、インターネットエクスプローラーから表示中のHTMLを取得する方法について教えてください。
  • マウスの右クリックで表示されるソースを取得するプログラムについても教えてください。
  • 表示されるコンテンツのHTMLデータを解析するため、VB.NETで必要な記述を知りたいです。
回答を見る
  • ベストアンサー

VB.NETでIEに表示中のHTMLを得る方法について

インターネットのhtmlデータを解析したくて下記のプログラムでインターネットエクスプローラーから 表示されている内容のhtmlを取得しているのですが、 ジャバスクリプトを実行後に表示されるページの場合 マウスの右クリックで表示するソースと、ブラウザの「表示(V)」、「ソース(C)」で 表示する方法とで内容が違うのですが、マウスの右クリックの時に表示される ソースを取得したいのですが、どんなプログラムにすれば良いでしょうか? Dim IE As Object Dim Url1 As String Dim HtmlData As String Url1 = "http://www.yahoo.co.jp" IE = CreateObject("InternetExplorer.Application") With IE .Navigate(Url1) Do While .Busy = True Loop Do While .document.ReadyState <> "complete" Loop .visible = True HtmlData = .document.DocumentElement.outerHTML End With

質問者が選んだベストアンサー

  • ベストアンサー
  • taseki
  • ベストアンサー率66% (155/233)
回答No.1

> マウスの右クリックで表示するソースと、ブラウザの「表示(V)」、「ソース(C)」で > 表示する方法とで内容が違うのですが それは、javascriptとは関係なく、単にフレームページなのでは? ブラウザの「表示」→「ソース」だと、トップフレームつまり「アドレス」欄に表示されているURLのページソースが表示されます。 マウスで右クリックだと、そのクリックした位置のページソースが表示されます。 あるいは、一見してフレームに見えない場合でも、インラインフレーム(IFRAME)かもしれませんし、そしてjavascriptでインラインフレームを挿入しているのかもしれません。 そのあたりを確認できれば、自ずと取得すべきページのURLが決まると思います。

関連するQ&A

  • 画像を表示しないでIEを開く方法

    VB.NETなのですが、 Dim IE as Object IE=CreateObject("Internetexolorer.application") IE.Navigate("http:www.***.co.jp") IE.Visible=True のような感じでIEを開いているのですが、 画像を表示する必要がないので、画像を表示しないで IEを開く方法が知りたいです。 Do While IE.Document.ReadyState <> "complete" : Loop などで表示が完了するまで待っているのですが、 必ずしも全部表示しなくてもhtmlだけ取得したら 次の処理に進めるので、画像の表示を待たないようにしたいです。 よろしくおねがいいたします。

  • VBA IEを操作。ファイルダウンロード

    IEを操作して、ファイルをダウンロードしようと思います。 色んなサイトからとってきて、使わせてもらっています。 '---------------------------------IEを開くときに使う Sub IE_OPEN(webUrl As String) Dim objShell Dim writesheet As Worksheet Dim n As Long Dim ID As String, Password As String Set objShell = CreateObject("Shell.Application") Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.Navigate2 webUrl Do While ie.Busy Or ie.readyState <> 4 DoEvents Loop Dim objINPUT Set objINPUT = ie.document.getElementsByTagName("INPUT") 'ループで頭からテキストが 次へ を探す For n = 0 To objINPUT.Length - 1 '※ type="submitボタンなので、.InnerTextじゃなくて、.Valueです ※※注意 If InStr(objINPUT(n).Value, "ログイン") > 0 Then '文字列の中から見つけたら Worksheets("Sheet1").Activate Do While ie.Busy Loop objINPUT(n).Click '見つけたINPUTタグのオブジェクトをクリック Do While ie.Busy Loop Exit For End If Next Set objINPUT = Nothing 'オブジェクト変数解放 End Sub '------------------------------IEを開く(この段階では既に開いてあります。) Private Sub CommandButton1_Click() Do While ie.Busy Or ie.readyState <> 4 DoEvents Loop ie.document.all.ah_ehName.Value = Me.ComboBox1.List(Me.ComboBox1.ListIndex) 'ID Do While ie.Busy Loop Dim objINPUT Dim n As Long Set objINPUT = ie.document.getElementsByTagName("INPUT") For n = 0 To objINPUT.Length - 1 If InStr(objINPUT(n).Value, "ダウンロード") > 0 Then objINPUT(n).Click Do While ie.Busy Loop Exit For End If Next Do While ie.Busy = True DoEvents Loop SendKeys "%S", True'保存 Do While ie.Busy = True DoEvents '何もしないループ(笑) Loop SendKeys "%O",True'ファイルを開く? Do While ie.Busy = True DoEvents Loop 'ie.Quit End Sub ’==================- 面倒なので、IEはPublic変数として モジュールに書いています。 (色んなモジュールを経由する必要があるため、このような手段を取りました) SendKeysをIEに送るというのが出来ずに困っています。 ダウンロードというボタンを押してのダウンロードなので、 ダウンロード用のURL等は分かりません。 Excel2003を使っています。 どうにかSendkeysで出来ないでしょうか? もしくは、もう少し分かりやすい方法は無いでしょうか。 (ファイルを保存しますか?のダイアログの「保存」をクリックして  所定の場所におき、開きたい。 そのまま開くのでもいいけれど、動作が不安定になるのは困る) 以上、よろしくお願い致します。

  • VBAでのIE操作で、ENTERキーが押せません

    VBAでIEの操作を勉強中です。 HTMLを整形するホームページ(https://lab.syncer.jp/Tool/HTML-PrettyPrint/)です。 左側のエリアにHTMLを入力すると右側に整形されたHTMLが表示されるものです。 手動ではなんら問題ありません。 作成したVBAから操作すると、左側のエリアにHTMLは入力されますが、右側に表示されません。 入力後にENTERキーが押されれば表示されるというところまでは解っています。 解っているんですが、VBAから押せません。 どなたかご教示願います。 以下作成したVBAです。 ----------------------------------------------------------------------- Sub testIE() Dim IE As Object Dim target As String Dim wText As String target = "https://lab.syncer.jp/Tool/HTML-PrettyPrint/" wText = "<html><head><title>test</title></head><body><h1>test</h1></body></html>" Set IE = CreateObject("InternetExplorer.Application") With IE .Visible = True .Navigate target Do While .Busy = True Or .ReadyState <> 4 DoEvents Loop Do While .Document.ReadyState <> "complete" DoEvents Loop .Document.getElementsByTagName("textarea")(0).Value = wText SendKeys "{ENTER}" MsgBox .Document.getElementsByTagName("textarea")(1).Value End With End Sub

  • サイトの記事をエクセルに落としたいのですが・・・

    あるサイトの記事をエクセルに落とそうと思い、下記の様なプログラムを組んでみましたが、様々なエラーが出て、かつそのエラーがなぜ起きているのか分からない状態になってしまいました。どのように修正すればよいのか、ご存じの方がいらしたら、ぜひご教授下さい。 もしくは、もっと別のやり方で記事をエクセルに落とせる方法をご存じの方がいらしたら、ぜひご教授下さい。 大雑把な質問になってしまい、「もっと自分で考えてから質問しろ」とお叱りの言葉を頂くかと思います。私自身、なるべく色々と調べてやってきましたが一か月格闘しても遅々として進まずデッドラインが近づいてきておりまして・・・また周りにVBAを知っている人が皆無という状況に耐え切れなくなり、このような質問をしてしまいました。平にご容赦下さい。 また何か補足情報が必要でしたらご遠慮なくコメントいただければと思います。よろしくお願いいたします。 Sub Macro4() Dim URL As String 'ファイルパス Dim IE As Object 'オブジェクト Dim Myhtml As Variant 'HTMLタグデータ Dim PART As String '収録されているPART Dim TITLE As String '何話目か Set IE = CreateObject("InternetExplorer.Application") PART = 1 Do While PART < 2 TITLE = 0 Do While TITLE < 10 With IE .Navigate "http://syarecowa.moo.jp/" + PART + "/" + TITLE + ".htm" .Visible = Falese Do While .Busy = True DoEvents Loop Myhtml = IE.Document.Body.innerText Myhtml = Replace(Myhtml, "<BR>", "") Cells(TITLE, PART) = Myhtml .Quit End With Set IE = Nothing Loop Loop

  • VBでのIE操作

    VBでのIE操作をしようとして色々調べています。 色んなサイトを見ながら途中までは何とかできましたが、どうしてもリンク先を表示できません。 お分かりになる方いましたら、お力添えいただければ幸いです。 状況: Excel2007使用  IE7  VB初心者です。 やりたい内容: VBでIEを立ち上げる ↓ ページからリンクをクリックする (ページ上に画像が貼り付けてあって、そこにURLくっついててハイパーリンクになっている。) (セキュリティの関係でハイパーリンク先を初期で表示することはできない。) ↓ 表示されたページに検索したい項目を入力 ↓ 結果をエクセルに反映する。 以上の作業をVBで組もうと思ってます。 よろしくお願いします。 Option Explicit Sub ie_test() 'IEの起動 Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True '処理したいページを表示します。 objIE.navigate "処理したいページ" 'ページの表示待ち While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True DoEvents Wend '開かれたIEを探す。 Dim objSHELL As Object Dim objWINDOW As Object Dim newIE As InternetExplorer Dim wait_time As Date Dim yCNT As Long Dim i As Integer '表示待ち wait_time = DateAdd("s", 2, Now()) Do While Now() < wait_time DoEvents Loop 'リンクの貼ってある画像をクリック For i = 0 To objIE.document.images.Length - 1 If InStr(objIE.document.images.Item(i).outerHTML, "image/btn131b1.gif") > 0 Then objIE.document.images.Item(i).Click End If Next '表示待ち wait_time = DateAdd("s", 2, Now()) Do While Now() < wait_time DoEvents Loop 'シェルのオブジェクトを作成する Set objSHELL = CreateObject("Shell.Application") Set newIE = objSHELL.Windows(objSHELL.Windows.Count - 1) Set objSHELL = Nothing '新しいウィンドウのログインボタンを押す Dim objINPUT As Object 'Inputタグ格納用 For Each objINPUT In newIE.document.all.tags("INPUT") If objINPUT.Value = "ログイン" Then objINPUT.Click Exit For End If Next '調べる項目 For yCNT = 3 To 1002 ' If Trim(Cells(yCNT, 1)) = "" Then Exit For 'A列が空白になったらループを抜ける 'ページが表示されたので処理を行います。 newIE.document.all("phone_no").Value = Cells(yCNT, 1) 'A列の文字を参照する newIE.document.all("exec").Click ※ここでオブジェクト変数。。。のエラーが発生する※ '表示待ち wait_time = DateAdd("s", 2, Now()) Do While Now() < wait_time DoEvents Loop '表示されたウインドウからデータをセットする Cells(yCNT, 2) = newIE.document.body.innerText '検索の結果をエクセルに反映 '新しいIEを閉じる newIE.Quit Set newIE = Nothing '前のIEを閉じる objIE.Quit Set objIE = Nothing Next yCNT End Sub 初心者なので色々調べたのですがわかりませんでした。。。

  • WebBrowserの読み込み待ちの処理の仕方

    VB2005にてプログラムしております。 WebBrowser内にて表示したページでID、PASSを自動入力、ログインするというプログラムですが、 -------------------------------------------------------------     Dim IDCODE As String = TextBox1.Text Dim PASSCODE As String = TextBox2.Text '文字列で指定したURLに飛ぶ WebBrowser1.Navigate("https://XXXXXXXXX.ne.jp/") '表示終了まで待つ ??????    ‘WebBrowser1へID、PASS入力処理 ------------------------------------------------------------- 上記の ?????? 部分に表示待ちの処理をするコードを入れると思うのですが、 With WebBrowser1 Do While .IsBusy = True Loop Do While .ReadyState <> "complete" Loop End With を入力すると読み込み途中で止まってしまうみたいです。 なにかいい方法がありますか?

  • VBAでソースから全てのURLを取得したい

    VBAでソースに書いてある全てのURLを取得したいのですが、現状では一部しか取得できません。 文字数制限にでも引っかかっているのでしょうか? どうすれば全てのURLを取得できるのか・・添削して頂けると or ヒントを教えて頂けると助かります。 よろしくお願いします。 (Excel2003を使用) Sub test() Dim objIE As Object Dim objTAG As Object Dim source As String Dim url As String Dim url_start As String Dim url_end As String Dim y As Long url_end = 1 y = 1 Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = False objIE.Navigate "http://dir.yahoo.co.jp/" Do While objIE.Busy = True DoEvents Loop Application.Wait Time:=Now + TimeValue("00:00:03") source = objIE.Document.All(1).Innerhtml Do While y < 10000 url_start = InStr(url_end, source, "<a href=", vbTextCompare) If url_start = 0 Then y = 10000 Else url_end = InStr(url_start, source, ">", vbTextCompare) url = Mid(source, url_start + 9, url_end - url_start - 10) Cells(y, 1).Value = url y = y + 1 End If Loop End Sub

  • エクセル excelVBA で 自動ログイン

    エクセルvba を使ったシステムトレードをしようと思い 初心者ながらVBAをいじっています. まずはじめにsbi証券に自動ログインをしようとする vbaを作ろうとおもい,インターネットを駆使して コードを書いてみましたが documentメソッドは失敗しましたというエラーがでてしまいます. 自分なりに色々と見返したりしたのですが どこが悪いのかいまいちわかりません. もしよろしければどこが悪いのか指摘していただけないでしょうか? よろしくお願いします. 以下ソース ******************************** Option Explicit Sub test() Dim ie As Object Dim strUserName, strPassword As String strUserName = Range("C5").Value strPassword = Range("C7").Value Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.Navigate "https://k.sbisec.co.jp/bsite/visitor/top.do" IE_Complete ie ' Do While ie.Busy = True '何もしないループ(笑) ' DoEvents ' Loop ie.Document.All.UserName.Value = strUserName 'ユーザー名 ie.Document.All.Password.Value = strPassword 'パスワード ie.Document.All.login.Click 'クリック End Sub Public Sub IE_Complete(ByVal ie As Object) 'IE読み込みが完了するまで待つ Do While ie.Busy = True DoEvents Loop Do While ie.Document.ReadyState <> "complete" DoEvents Loop End Sub

  • 印刷ダイアログを表示させない方法

    いつもお世話になっております。 ExcelのVBAで印刷ダイアログを表示させないようにするにはどのようなプロパティを設定すればよいでしょうか。 以下のようなコードを作成しました。 Sub ファイルの印刷() Dim trgFolder As String Dim buf As String Dim sht As Worksheet Application.ScreenUpdating = False Application.DisplayAlerts = False trgFolder = _ "C:\Documents and Settings\Name\My Documents\ファイル\" buf = Dir(trgFolder & "*.xls") Do While buf <> "" Workbooks.Open trgFolder & buf For Each sh In Worksheets With ActiveSheet .PageSetup.Zoom = 80 .PrintOut End With Next Workbooks(buf).Close buf = Dir() Loop Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub "ファイル"フォルダの各Excelファイルのすべてのシートを印刷するためのマクロです。 よろしくお願いします。

  • IE操作で別タブ表示のHTMLソースの取得方法は?

    VB.NET(VB 2010 Express)でIE9をWebBrowserコントロールではなく直接操作しています。 先にここで、あるサイトのトップページを表示し、それにユーザID、パスワードを入力し、ログオンボタンをクリックして次のページを別タブで表示する方法を教えて頂きました。 そこで、別タブに表示した次ページのHTMLソースを取得する方法として、下記のコードを教えて頂きました。 Dim objIE As Object objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate("http://login.yahoo.co.jp/") Do While objIE.Busy System.Threading.Thread.Sleep(500) Loop objIE.Document.login_form.login.Value = "xxxxx" 'ユーザIDを入力 objIE.Document.login_form.passwd.Value = "yyyyy" 'パスワードを入力 objIE.Document.login_form.target = "_blank" '別ページに表示 objIE.Document.login_form.submit() Dim Shell As Object Dim win As Object Dim newObjIE As Object Shell = CreateObject("Shell.Application") For Each win In Shell.Windows If TypeName(win.document) = "HTMLDocument" Then 'このif文がTrueにならない If win.document.URL = "http://yahoo.co.jp" Then newObjIE = win Exit For End If End If Next しかし、コメントのあるif文がTrueにならないようです。修正方法を教えて頂きたくよろしくお願い致します。