simule el desplazamiento infinito en c # para obtener el html completo de una página

c# html-agility-pack infinite-scroll

Pregunta

Hay muchos sitios que usan este estilo (imo) molesto de "desplazamiento infinito". Ejemplos de esto son sitios como tumblr, twitter, 9gag, etc.

Recientemente traté de eliminar algunas fotos de estos sitios mediante programación con HtmlAgilityPack. Me gusta esto:

HtmlWeb web = new HtmlWeb();  
HtmlDocument doc = web.Load(url);
var primary = doc.DocumentNode.SelectNodes("//img[@class='badge-item-img']");
var picstring = primary.Select(r => r.GetAttributeValue("src", null)).FirstOrDefault();

Esto funciona bien, pero cuando intenté cargar el HTML de ciertos sitios, noté que solo recuperé una pequeña cantidad de contenido (digamos los primeros 10 "posts" o "fotos", o lo que sea ..) Esto hizo que Me pregunto si sería posible simular el "desplazamiento hacia abajo" de la página en c #.

Este no es solo el caso cuando carga el html programáticamente, cuando simplemente voy a sitios como tumblr, y verifico firebug o simplemente "ver código fuente", esperaba que todo el contenido estuviera allí, pero mucho Parece estar oculto / insertado con javascript. Solo el contenido que es realmente visible en mi pantalla está presente en la fuente HTML.

Entonces, mi pregunta es: ¿es posible simular el desplazamiento infinito a una página y cargar ese HTML con c # (preferiblemente)?

(Sé que puedo usar API's para tumblr y twitter, pero solo estoy tratando de divertirme hackeando cosas junto con HtmlAgilityPack)

Respuesta popular

No hay forma de hacer esto de manera confiable para todos estos sitios web de una sola vez, excepto para integrar un navegador web (que normalmente no funciona en entornos sin cabeza).

Lo que debería considerar hacer en su lugar es mirar el JavaScript del sitio para ver qué consultas AJAX se utilizan para obtener contenido a medida que el usuario se desplaza hacia abajo.

Como alternativa, use un depurador web en su navegador (como el que se incluye en Chrome). Estos depuradores generalmente tienen un panel de "red" que puede usar para inspeccionar las solicitudes AJAX realizadas por la página. Mirar estas solicitudes a medida que se desplaza hacia abajo debería proporcionarle suficiente información para escribir el código C # que simula esas solicitudes.

Luego, tendrá que analizar la respuesta de esas solicitudes como cualquier tipo de contenido que proporcione la API en particular, que probablemente será JSON o XML, pero casi seguramente no es HTML. (Esto puede ser mejor para usted de todos modos, ya que le ahorrará tener que analizar HTML orientado a la visualización, mientras que la API de AJAX le dará objetos de datos que deberían ser mucho más fáciles de usar).



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow