C# HTML Code von "interaktiver" Webseite runterladen

OP #4539655
Lesenswert?

Hallo,

ich möchte von einer sehr langsamen Website per C# Forms Anwendung den 
HTML Code runterladen.

Nun habe ich relativ wenig Ahnung von Webseiten und deren Programmierung 
aber ich denke mir mal, dass auf der Seite die Daten per Javascript 
/Google API geladen werden.

Und damit scheint der WebClient nicht klarzukommen. Er fängt zwar an den 
Header runterzuladen, bricht dann aber ab.

Nun habe ich versucht, stattdessen den Forms.WebBrowser zu nehmen, und 
damit im Hintergrund irgendwie die Daten runterzuladen. Aber wenn man 
mit ihm die Webseite aufrufen möchte, heißt es auf der Seite, man solle 
den WebBrwoser aktualisieren.

Nach ein bisschen googeln habe ich rausgefunden, dass man sowas durch 
einen "Headless browser" lösen kann.

Dabei habe ich aber zwei Probleme: Einerseits muss man irgendeinen 
externen Kram runterladen und einbinden (wobei .NET 4.0 doch eigentlich 
ausreichend umfangreich für sowas sein sollte?), andererseits habe ich 
das Gefühl mit so einem Headless Browser mit Kanonen auf Spatzen zu 
schießen.

Bei der Seite handel es sich um die Profilseite bei chess.com 
(https://chess24.com/de/profile/maxmustermann). Dort ist es ähnlich wie 
auf der Hauptseite bei facebook: Die ersten Daten werden automatisch 
runtergeladen und erst wenn man runterscrollt werden weitere Daten 
hinzugeladen. Ich brauche nur die obersten Daten (das letzte gespielte 
Spiel), die beim Aufruf automatisch runtergeladen werden.

Brauche ich für mein Vorhaben wirklich so einen externen Headless 
Browser?
Gast #4539711
Lesenswert?

Die IE-Version, die System.Windows.Forms.WebBrowser verwendet, kann per 
Registry eingestellt werden:
https://msdn.microsoft.com/en-us/library/ee330730(VS.85).aspx
http://stackoverflow.com/questions/17922308/use-latest-version-of-ie-in-webbrowser-control
(...eine IE-Version, die die eingestellte Version unterstützt muss dazu 
natürlich installiert sein)

Mit WebClient dürfte man wohl das gleiche abrufen, wie die üblichen 
Browser als Quelltext anzeigen  (STRG+U) - Also den Seitenquelltext vor 
Ausführung von Javascripten.
#4541153
Lesenswert?

Viele Websites sind heutzutage so gemacht, so wie Du das schon 
festgestellt hast, dass sie mittels JavaScript/AJAX solche Sachen "zur 
Laufzeit" nachladen. Als Übertragungsformat wir dann gerne JSON genutzt.

Mit ein wenig Reverse-Engineering der Website könntest Du dann eventuell 
relativ einfach etwas realisieren können, welches nur die relevanten 
Daten abruft und mittels eines Frameworks wie 
http://www.newtonsoft.com/json direkt in .NET Objekte umwandelt.
Gast #4541155
Lesenswert?

Warum machst du dir das Leben so schwer?

Öffne die Webseite mit einem Debugger (in fast allen Browsern 
integriert) und schau nach, wie/wo/wann die Webseite die interessanten 
Daten Lädt.

Voila:

https://chess24.com/api/web/userProfileAPI/loadPinboard?permalink=maxmustermann&language=de

ist zwar auch nicht schön zu parsen (JSON in HTML in JSON), aber du 
kriegst die gewünschten Daten mit nur einem Request praktisch am 
Silbertablett...
OP #4541574
Lesenswert?

Hallo nochmal an alle! Vielen Dank an Euch! Die Lösung von Planlos 
gefällt mir bisher am besten. Ich brauche keine zusätzliche Software... 
und vor allem: Diese Geschwindigkeit! Das Öffnen der Originalseite 
dauert bei mir im Standardbrowser teilweise über 30 Sekunden. Die 
gedebuggte "wo kommen die Daten her?"-Seite etwa 2 bis 3 Sekunden.

Super! Vielen Dank nochmal!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren