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?
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.
Super, vielen Dank! Ich werde es gleich mal ausprobieren! Viele Grüße
Hallo, schau mal nach Watin http://watin.org/documentation/. Ist eigentlich ein Stücksoftware zum Test von Web Seiten kann aber auch noch ganz andere nützliche Dinge. Ich benutze das Teil um bei einer großen Krankenversicherung in Hause Informationen in Web Seiten einzutragen oder abzufragen. Gruß Frank
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.
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...
Wo das bereits genannte https://www.nuget.org/packages/Newtonsoft.Json/ für JSON hilft (alternativ kann auch Json.Decode() aus dem System.Web.Helpers Namespace verwendet werden), ist für die HTML-Verarbeitung dann https://www.nuget.org/packages/HtmlAgilityPack gut geeignet.
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!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.