■87343 / inTopicNo.10) |
Re[2]: Webbrowserコントロールにつきまして |
□投稿者/ 魔界の仮面弁士 (1661回)-(2018/05/14(Mon) 11:12:18)
|
■No87334 (ak さん) に返信 > webBrowserコントロールでurl https://www.msn.com/ja-jpを起動しますと頭から > タグ(window._perfMarker ・・・)が表示されます。タグが文字列として取得された為、また > タグを表示させない為にはurl側でwebBrowserに合ったソースで記載しなければいけないものかと > 推測しています。
そのページのドコを取得したいのでしょうか? もしもリンクを拾いたいだけなら、こんな感じで得られそうです。
Private Sub Command1_Click() Dim link As Object, l As Long l = 0 For Each link In WebBrowser1.Document.links l = l + 1 Debug.Print l, link.innerText Debug.Print , link.href Debug.Print Next End Sub
> テキスト形式で実行 > 質問 > タグが表示される理由及びタグを非表示にする方法がありましたら、ご指導のほどよろしくお願いいたします。
『テキスト形式で実行』の意味が良く分かりませんが、とりあえず思いつく限りで。
Option Explicit
Private Sub Form_Load() WebBrowser1.Silent = True WebBrowser1.Navigate "https://www.msn.com/ja-jp" End Sub
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant) ''''画面に表示されているテキストが取得できれば良い場合 'body 要素を選択状態にして、クリップボード経由で取得 WebBrowser1.Document.body.focus WebBrowser1.ExecWB OLECMDID_SELECTALL, OLECMDEXECOPT_DODEFAULT WebBrowser1.ExecWB OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT Text1.Text = Clipboard.GetText(vbCFText) Clipboard.Clear
''''選択範囲のタグやテキストを得る場合 Dim selection As Object Set selection = WebBrowser1.Document.selection If selection.type = "Text" Then 'type プロパティは "Text", "Control", "None" のいずれか Dim range As Object Set range = WebBrowser1.Document.selection.createRange() Text2.Text = range.htmlText Text3.Text = range.Text End If
'選択範囲を解除 WebBrowser1.ExecWB OLECMDID_CLEARSELECTION, OLECMDEXECOPT_DODEFAULT
''''Body 要素の中身を、テキストだけ取得したい場合 Text4.Text = WebBrowser1.Document.body.innerText ''''Body 要素のタグごと取得したい場合 Text5.Text = WebBrowser1.Document.body.outerHTML ''''ページ内のすべてのタグを対象にする場合は、documentElement プロパティでルートノードを得て、 ''''そこから innerText , innerHTML, outerText, outerHTML などで取得することもできる。 ''''ただし TextBox だと文字数制限があるので、長いコンテンツの場合はRichTextBox を使ったほうがよい RichTextBox1.Text = WebBrowser1.Document.documentElement.outerHTML
''''上記をクリップボードに直接セットする場合 Clipboard.Clear Clipboard.SetText WebBrowser1.Document.documentElement.outerHTML, vbCFText
''''outerHTML 等だと、HTML の解析結果がロードされることになるため、 ''''空白や改行、タグの大文字小文字、"<br>" と "<br />" の違いは失われるし、 ''''<script> 等で動的に生成されたコンテンツも含まれることになる。 ''''もしも、サーバーから返される生の HTML をそのまま受け取りたい場合には ''''IPersistStreamInit もしくは IPersistFile を使った方が良いが、 ''''そのためには追加の参照設定が必要になってしまう。 '' ' Dim pf As IPersistFile ' Set pf = WebBrowser1.Document ' pf.Save "C:\temp\example.html", True ' '' ' Dim ps As IPersistStreamInit ' Set ps = WebBrowser1.Document ' Dim stm As ADODB.Stream ' Set stm = New ADODB.Stream ' stm.Type = adTypeBinary ' stm.Open ' ps.save stm, True ' stm.Flush ' stm.position = 0 ' stm.Type = adTypeText ' stm.Charset = "_autodetect" '文字コード自動判別 ' RichTextBox2.Text = stm.ReadText(adReadAll) ' stm.Close ' ''''追加の参照設定なしで IPersistFile を呼び出してみた場合のサンプル ' http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200310/03100017.txt End Sub
|
|