一部のサイトでHTMLAgilityPack .load接続が閉じられています

.net html-agility-pack vb.net

質問

私はいくつかのサイトで動作する以下のコードを持っていますが、私が試した特定のサイトではうまく動作せず、エラーが発生します。「その下にある接続は閉じられました。 "なぜこれは一部のサイトで動作し、他のサイトでは動作しませんか?たとえば、siteAで使用されている場合は、div "wrapper"の最後のハイパーリンクを取得します。しかし、別のサイトでは、私はちょうど閉じた接続を取得します。助けてください。

Private Function getText() As String
    Dim web = New HtmlWeb()
    Dim html As HtmlDocument

    html = web.load("http://some-website.com")
    Dim lastLink = html.DocumentNode.SelectSingleNode("//div[@id='wrapper']//a[last()]")

    If lastLink IsNot Nothing Then
        Return lastLink.InnerHtml
    Else
        Return "nothing found"
    End If

End Function

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load        
    label4.Text = getText()
End Sub

受け入れられた回答

それには多くの理由が考えられます。遅延されたjavascriptの実行が気になるか、古風なブラウザ切り替えが起こります。 HtmlAgilityPackで使用されているブラウザでブラウザのリクエストヘッダを確認すると便利です。

私がやるべき最初のことは、同じユーザエージェント文字列を使うことです:

Private Function getText() As String
    Dim web = New HtmlWeb()
    web.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36"
    Dim html As HtmlDocument

    html = web.load("http://some-website.com")
    Dim lastLink = html.DocumentNode.SelectSingleNode("//div[@id='wrapper']//a[last()]")

    If lastLink IsNot Nothing Then
        Return lastLink.InnerHtml
    Else
        Return "nothing found"
    End If

End Function

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load        
    label4.Text = getText()
End Sub

私は、あなたのブラウザが実際のリクエストヘッダ(例えば、Chrome開発ツール、Firebug)について手がかりを与えることができると思います。両方の設定を簡単に比較するには、 http://www.mybrowserinfo.com/からフェッチします 。自分のWebサーバーを持っている場合は、ログを表示するだけです。これがトラフィックをダンプするのに役立たないならば、ブルートフォースオプションになります。




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ