simulieren Sie in c # endloses Scrollen, um den vollständigen HTML-Code einer Seite zu erhalten

c# html-agility-pack infinite-scroll

Frage

Es gibt viele Websites, die diesen (imo) nervigen "unendlichen Scroll" -Stil verwenden. Beispiele hierfür sind Seiten wie Tumblr, Twitter, 9gag, etc ..

Ich habe kürzlich versucht, einige Bilder von diesen Seiten programmatisch mit HtmlAgilityPack zu scrappen. so was:

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();

Das funktioniert gut, aber als ich versuchte, den HTML-Code von bestimmten Seiten zu laden, bemerkte ich, dass ich nur eine kleine Menge an Inhalt zurückbekam (sagen wir die ersten 10 "Posts" oder "Bilder" oder was auch immer ..) Ich frage mich, ob es möglich wäre, das "Scrollen nach unten" der Seite in c # zu simulieren.

Dies ist nicht nur der Fall, wenn ich den HTML-Code programmatisch lade, wenn ich einfach auf Websites wie Tumblr gehe und den Firebug überprüfe oder einfach "Quelle anzeigen", erwarte ich, dass der gesamte Inhalt irgendwo drin sein wird, aber viel davon scheint mit JavaScript versteckt / eingefügt zu sein. Nur der Inhalt, der tatsächlich auf meinem Bildschirm sichtbar ist, ist in der HTML-Quelle vorhanden.

Meine Fragen lauten also: Ist es möglich, unendlich viele Scrollen auf eine Seite zu simulieren und diesen HTML-Code mit c # (vorzugsweise) zu laden?

(Ich weiß, dass ich APIs für tumblr und twitter verwenden kann, aber ich versuche nur, etwas Spaß beim Hacken mit HtmlAgilityPack zu haben)

Beliebte Antwort

Es gibt keine Möglichkeit, dies zuverlässig für alle diese Websites auf einmal zu tun, ohne einen Webbrowser einzubetten (was in kopflosen Umgebungen normalerweise nicht funktioniert).

Was Sie stattdessen in Betracht ziehen sollten, ist das JavaScript der Site, um zu sehen, welche AJAX-Abfragen zum Abrufen von Inhalten verwendet werden, während der Benutzer nach unten scrollt.

Alternativ können Sie einen Web-Debugger in Ihrem Browser verwenden (wie den in Chrome enthaltenen). Diese Debugger haben normalerweise einen "Netzwerk" -Fenster, den Sie verwenden können, um AJAX-Anfragen zu prüfen, die von der Seite ausgeführt werden. Wenn Sie diese Anforderungen betrachten, während Sie nach unten scrollen, sollten Sie genügend Informationen erhalten, um C # -Code zu schreiben, der diese Anforderungen simuliert.

Sie müssen dann die Antwort von diesen Anfragen analysieren, egal welche Art von Inhalt diese bestimmte API liefert, was wahrscheinlich JSON oder XML ist, aber fast sicher kein HTML. (Dies kann für Sie ohnehin besser sein, da Sie dadurch Display-orientiertes HTML analysieren müssen, während die AJAX-API Ihnen Datenobjekte liefert, die viel einfacher zu verwenden sind.)



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum