La connexion HTMLAgilityPack .load est fermée sur certains sites

.net html-agility-pack vb.net

Question

J'ai le code suivant qui fonctionne sur certains sites que j'ai essayé de rechercher des informations, mais cela ne fonctionnera pas sur un site particulier que j'ai essayé et j'obtiens le message d'erreur "La connexion sous-jacente était fermée: la connexion a été fermée de manière inattendue. " Pourquoi cela fonctionnerait sur certains sites et pas d'autres? Si utilisé sur siteA, par exemple, je reçois le dernier lien hypertexte dans div "wrapper". mais sur un autre site, je viens d'avoir une connexion fermée. s'il vous plaît aider.

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

Réponse acceptée

Il y a plusieurs raisons possibles à cela. L’exécution différée de javascript vient à l’esprit ou une sorte de changement de navigateur archaïque. Il peut être utile de vérifier les en-têtes de requête de votre navigateur avec ceux utilisés dans HtmlAgilityPack.

La première chose à faire est d'utiliser la même chaîne d'agent utilisateur:

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

Je suppose que votre navigateur peut vous donner un indice sur l'en-tête de la demande (par exemple, Outils de développement Chrome, Firebug). Un moyen rapide de comparer les deux paramètres peut être effectué en allant à http://www.mybrowserinfo.com/ . Si vous avez votre propre serveur Web, consultez simplement les journaux. Si cela ne vous aide pas, le trafic sera l'option la plus brutale.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi