La conexión .loadload de HTMLAgilityPack está cerrada en algunos sitios

.net html-agility-pack vb.net

Pregunta

Tengo el siguiente código que funciona en algunos sitios en los que he intentado buscar información, pero no funcionará en un sitio en particular que he intentado, y aparece el error "La conexión subyacente se cerró: la conexión se cerró inesperadamente. " ¿Por qué funcionaría esto en algunos sitios y no en otros? Si se usa en siteA, por ejemplo, obtengo el último hipervínculo en div "wrapper". Pero en otro sitio, acabo de obtener la conexión cerrada. por favor ayuda.

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

Respuesta aceptada

Hay muchas razones posibles para eso. La ejecución de Javascript diferido viene a la mente o es un tipo de cambio de navegador arcaico. Podría ser útil verificar los encabezados de solicitud de los navegadores con los que se usan en HtmlAgilityPack.

Lo primero que haría es usar la misma cadena de agente de usuario:

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

Supongo que su navegador puede darle una pista sobre el encabezado de la solicitud real (por ejemplo, Chrome Developer Tools, Firebug). Se puede hacer una manera rápida de comparar ambas configuraciones en http://www.mybrowserinfo.com/ . Si tiene su propio servidor web, simplemente vea en los registros. Si esto no ayuda a deshacerse del tráfico sería la opción de fuerza bruta.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué