DOBON.NET DOBON.NETプログラミング掲示板過去ログ

WebBrowserでのリンクの取得

環境/言語:[VB2005]
分類:[.NET]

お世話になっております。

VB2005のWebBrowserコンポーネントを使って、linkを取得しようと思っているのですが、思うようにいきません。

WebBrowser1.Document.Links.Count と指定すれば、表示されているwebページの中のリンクの数は取得できたのですが、それぞれのリンクの名前を取得しようとするとうまくいきません。

for i = 0 to WebBrowser1.Document.Links.Count - 1
msgbox(リンク名の表示)
i = i + 1
next

このような形で、リンクの名前をリストアップしたいのですが、リンク名を表示するにはどのような指定をすればよろしいのでしょうか。

よろしくご教授をお願いいたします。
■No21440に返信(まささんの記事)
> お世話になっております。
>
> VB2005のWebBrowserコンポーネントを使って、linkを取得しようと思っているのですが、思うようにいきません。
>
> WebBrowser1.Document.Links.Count と指定すれば、表示されているwebページの中のリンクの数は取得できたのですが、それぞれのリンクの名前を取得しようとするとうまくいきません。
>
> for i = 0 to WebBrowser1.Document.Links.Count - 1
> msgbox(リンク名の表示)
> i = i + 1
> next
>
> このような形で、リンクの名前をリストアップしたいのですが、リンク名を表示するにはどのような指定をすればよろしいのでしょうか。
>
> よろしくご教授をお願いいたします。
>
>
>

ふろん

当を得ているかどうか分かりませんが。私も似たようなことかしたくて探していたらこんなのがありました。
ご参考までに、未だ未テストです。

http://www.atmarkit.co.jp/fdotnet/dotnettips/687nondispbrowser/nondispbrowser.html
こんにちは。
Linksがあるのをご存知であれば、それが返してるのはHTML要素の専用コレクションなので、それをそのままループで利用して各要素での属性やテキスト部分にアクセスすればできますよ。

        Dim strb As New System.Text.StringBuilder
        For Each tmpelem As HtmlElement In Me.BrowserUnit.Document.Links
            If tmpelem.InnerText & "" = "" Then
                strb.AppendLine(tmpelem.GetAttribute("title"))
            Else
                strb.AppendLine(tmpelem.InnerText)
            End If
        Next
        MsgBox(strb.ToString)
のように。
■No21456に返信(こど。さんの記事)
> こんにちは。
> Linksがあるのをご存知であれば、それが返してるのはHTML要素の専用コレクションなので、それをそのままループで利用して各要素での属性やテキスト部分にアクセスすればできますよ。
>
> Dim strb As New System.Text.StringBuilder
> For Each tmpelem As HtmlElement In Me.BrowserUnit.Document.Links
> If tmpelem.InnerText & "" = "" Then
> strb.AppendLine(tmpelem.GetAttribute("title"))
> Else
> strb.AppendLine(tmpelem.InnerText)
> End If
> Next
> MsgBox(strb.ToString)
> のように。

こど様 ふろんです

ありがとうございます。
このチップスいいですね。

リンクがあれば全て探し出してるのですね
大変参考になりました。
応用を考えて見ます。
ふろん様

ご返事ありがとうございます。

教えていただいたサイトを参考にして、次のようなプログラムを作ってみたところ、うまく作動しました。


For i = 0 to WebBrowser1.Document.GetElementsByTagName("a").Count - 1

'リンクの取得
MsgBox(WebBrowser1.Document.GetElementsByTagName("a")(i).GetAttribute("href").ToString)

'アンカーテキストの取得
MsgBox(WebBrowser1.Document.GetElementsByTagName("a")(i).InnerText.ToString
)

Next


ふろん様も自動化をなさっているようですが、また情報交換などしていただければ幸いです。
まだ自分の実力はまだまだですが、根気よくがんばっています(^_^)

今後ともよろしくお願いします。

ありがとうございました。
解決済み!
こど様

ご返事ありがとうございます。


ふろん様の紹介してくださったリンクは、Document.Linksを使わず、GetElementsByTagName("a")のGetAttribute("href")やInnerTextを取得する方法でした。

一方、こど様の教えてくださった方法は、Document.Linksをうまく活かした方法ですね。
このスクリプトとても勉強になります。

このあたりのWebの自動化は、HtmlElementをよく理解していないと難しいと痛感しています。
最近ようやくmsdnにこのあたりの解説があることをみつけ、勉強しているところです。


また、初歩的なご質問をさせていただくこともあるかもしれません。

今後ともよろしくお願いいたします。

ありがとうございました。
解決済み!
■No21458に返信(まささんの記事)
> ふろん様
>
> ご返事ありがとうございます。
>
> 教えていただいたサイトを参考にして、次のようなプログラムを作ってみたところ、うまく作動しました。
>
>
> For i = 0 to WebBrowser1.Document.GetElementsByTagName("a").Count - 1
>
> 'リンクの取得
> MsgBox(WebBrowser1.Document.GetElementsByTagName("a")(i).GetAttribute("href").ToString)
>
> 'アンカーテキストの取得
> MsgBox(WebBrowser1.Document.GetElementsByTagName("a")(i).InnerText.ToString
> )
>
> Next
>
>
> ふろん様も自動化をなさっているようですが、また情報交換などしていただければ幸いです。
> まだ自分の実力はまだまだですが、根気よくがんばっています(^_^)
>
> 今後ともよろしくお願いします。
>
> ありがとうございました。

まさ様

少しはお役に立てたようでよかったです。

まさ様のサンプルもテストしてみましたが

'リンクの取得 の方はうまくいきましたが

'アンカーテキストの取得 はエラーでした

オブジェクト参照がオブジェクト インスタンスに設定されていません。

のエラーでした

今後とも情報交換よろしくお願いします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板