C# WebClient Cloudflare Webseite herunterladen?
Hallo, ich habe einmal eine Frage:
Kann man über den WebClient in C# die HTML einer Webseite herunterladen?
Wenn ja, welche Möglichkeiten würde es geben?
Da die Webseite mit JavaScript ja Aufgaben stellt, die gelöst werden müssen, ist es doch eigentlich in C# nicht möglich, oder?
Die Möglichkeit von der ich gehört habe, wäre über den Browser und dann die Cookies und den Useragent auslesen. Aber ich habe keine Ahnung, wie so etwas aussehen könnte.
Schon einmal Danke für eure Hilfe bei meiner Frage.
1 Antwort
Die Frage, ob etwas möglich ist, kann man beinahe immer mit "Ja" beantworten - auch bei C#.
Du kannst den HTML-Text runterladen, einfach ein GET auf die Website machen.
Wenn diese Seite aber noch andere Dinge (JavaScript, CSS, iframe) nachlädt, findest Du das darin natürlich nicht.
Du kannst aber die entscheidenden Stellen raus suchen und ebenfalls nachladen und einfüggen.
JavaScript ausführen dürfte aber eine andere Hausnummer werden, spätestens da würde ich auf einen Browser zurückgreifen. Das WebBrowser-Control (in WinForms oder WPF) von Microsoft ist ziemlich alt und basiert noch auf dem InternetExplorer, der Nachfolger (WebView2) hat noch so einige Krankheiten und Einschränkungen. Oder Du nutzt die API von einem der anderen Browser.
Aber so oder so wirst Du die Website vermutlich rendern müssen, um garantieren zu können, dass sie auch korrekt geladen wurde. Du könntest versuchen, das Rendern nicht sichtbar zu machen, wie genau das abläuft, hängt dann aber von der jeweiligen API ab. Oder die API bietet tatsächlich eine Möglichkeit an, den fertigen HTML-Text aufzubereiten, das musst Du dann aber in der Doku nachlesen.
Der entgültige HTML-Code steht aber erst wirklich fest, nachdem alles nachgeladen und das JavaScript ausgeführt wurde und das ist möglicherweise nur möglich, wenn Du sie tatsächlich renderst. Ob die Vermutung stimmt, musst Du in der Doku der verwendeten Browser-API nachlesen.
Und nochmal: Beinahe alles ist möglich, erst wenn es um hardwarenahe Programmierung geht, ist C# eingeschränkt, aber selbst Code im Browser ist mit WebAssemblies möglich.
Ob dein Vorhaben möglich ist, hat also nichts mit der Programmiersprache zu tun, sondern mit dem Vorhaben an sich.
Wenn irgendetwas prüft, ob da ein Bot sitzt, musst Du herausfinden, wie das geprüft wird und dem entgegen wirken. Der Browser ist ja auch nur in irgendeiner Programmiersprache entwickelt. Der Browser macht also irgendetwas, dass er nicht wie ein Bot aussieht und das geht mit C# genauso wie mit allen anderen Sprachen auch.
Danke für deine antwort, aber entweder habe ich das nicht ganz verstanden ode darauf wollte ich nicht ganz raus.
Ich würde die Webseite ja nicht anzeigen wollen sondern nur den HTML Code runterladen um z.B. später nach irgendwelchen Links oder Text die Seite zu durchsuchen.
Jetzt wäre sie aber durch Cloudflare geschützt und überprüft voher mit Hilfe von aufgaben für JavaScript ob sich dort auch wirklich kein Bot sitzt.
Die Webseite wäre also nicht für C# einsehbar. Wie wäre es möglich den Code trotzdem herunterladen. Oder würde dies mit C# gar nicht gehen? Denn die Cloudflare evader im NuGet-Manager haben bei mir als lösung nicht funktioniert. Und obwohl das nur ein experiment ist wäre es einfach schön zu wissen ob un wie das möglich wäre.