Thread.Sleep oder Timer? [C#]

01/11/2015 03:56 Zweihorn.#1
Hey,
bin gerade dabei einen Account Creator für Aeriagames zu machen.
Bin schon ziemlich weit, kämpfe aber noch mit einer Kleinigkeit.

So siehts aus wenn ich es starte:
Und so soll es aussehen:

Sobald ich das Programme starte, connectet der Webbrowser, (der erstmal nur zum Testen sichtbar ist), soweit so gut. Allerdings möchte ich gerne auf den "Get Captcha"-Button verzichten, und möchte, dass der Captcha ebenfalls direkt geladen wird.

Habe es so schon probiert, funktioniert allerdings nicht:

Und zwar, weil die Seite noch nicht ganz geladen ist, wenn er den Captcha laden möchte. Hab dann rumgegoogelt und es mit'm Thread.Sleep probiert, funktioniert allerdings auch nicht, weil der ganze Thread dann ja gefreezt ist.
Und mit dem Timer komm ich nicht ganz so weiter ...

Wollte einfach mal fragen, was ich an dieser Stelle benutzen kann, damit er z.B. erst die Seite zu Ende laden lässt oder einfach 3 Sekunden wartet, bevor er das Captcha abfragt.
01/11/2015 04:05 .Opcode#2
Warum das ganze nun über das WebBrowser-Control läuft ist mir schleierhaft, du kannst auch ein WebRequest nehmen, ist nicht nur von der Perfomance besser ;).

Um auf deine Frage zu antworten, es gibt ein Event, welches überprüft ob die Website im Control vollständig geladen wurde, wenn ja, dann erst das gewünschte auslesen lassen.
01/11/2015 12:38 D3luxe.#3
Ich weiß nicht genau, was du als Browser/Webdriver benutzt, ich gehe mal von Selenium oä. aus...
Normalerweise sollte bei Navigate schon automatisch gewartet werden, bis die Seite vollständig geladen wurde.

Ansonsten kannst du auch irgendwo ne Option setzen, dass bis zu x Sekunden gewartet werden soll, wenn ein Element angesprochen wird, das (noch) nicht verfügbar ist.

Das Captcha sollte aber auch einfach mit nem RegEx aus dem Quellcode herauszuholen sein.

Nebenbei würde ich es auch erst mal mit nem WebRequest, bzw. besser: HttpClient, weil der Async benutzt werden kann, versuchen.

Edit: Nvm, ist ja nur ne ganz normale Webbrowser Control...
01/11/2015 12:55 Zweihorn.#4
Quote:
Originally Posted by D3luxe. View Post
Ich weiß nicht genau, was du als Browser/Webdriver benutzt, ich gehe mal von Selenium oä. aus...
Normalerweise sollte bei Navigate schon automatisch gewartet werden, bis die Seite vollständig geladen wurde.

Ansonsten kannst du auch irgendwo ne Option setzen, dass bis zu x Sekunden gewartet werden soll, wenn ein Element angesprochen wird, das (noch) nicht verfügbar ist.

Das Captcha sollte aber auch einfach mit nem RegEx aus dem Quellcode herauszuholen sein.

Nebenbei würde ich es auch erst mal mit nem WebRequest, bzw. besser: HttpClient, weil der Async benutzt werden kann, versuchen.
ehm, das geht ein wenig über meine möglichkeiten D:
das programm an sich funktioniert ja auch schon, also das captcha, die eingabe von username und pw, der submit button.

nur weiß ich noch nicht was ich dafür einsetzen soll. habe es eben mit dem WebBrowserDocumentCompletedEvent probiert, aber klappt noch nicht ._.

Weiß jemand warum?
01/11/2015 14:01 D3luxe.#5
Es wäre mal interessant zu sehen, wie du an das Captcha kommst.

Das ist nämlich per iframe in die Seite eingebunden.
PHP Code:
<iframe src="https://www.google.com/recaptcha/api/noscript?k=6LcR-MUSAAAAAODqgJEVRJl-lPlhEfZqxaEzRgRq" height="300" width="500" frameborder="0"></iframe
Es ist mir schleierhaft, wie du das Ganze mit einer WebBrowser Control bewerkstelligen willst^^ Aber ich lasse mich gerne belehren.
Ich meine, mit HttpClient wäre das kein Problem, weil du automatisch die selben Cookies etc. hast.

Das mit dem DocumentCompleted Event funktioniert zumindest, habe es eben ausprobiert. Die Seite ist komplett geladen, du kannst dir den Source Code zur Überprüfung mit
PHP Code:
File.WriteAllText("source.txt"webBrowser1.DocumentText); 
ausgeben lassen.
01/11/2015 14:10 Zweihorn.#6
Quote:
Originally Posted by D3luxe. View Post
Es wäre mal interessant zu sehen, wie du an das Captcha kommst.

Das ist nämlich per iframe in die Seite eingebunden.
PHP Code:
<iframe src="https://www.google.com/recaptcha/api/noscript?k=6LcR-MUSAAAAAODqgJEVRJl-lPlhEfZqxaEzRgRq" height="300" width="500" frameborder="0"></iframe
Es ist mir schleierhaft, wie du das Ganze mit einer WebBrowser Control bewerkstelligen willst^^ Aber ich lasse mich gerne belehren.
Ich meine, mit HttpClient wäre das kein Problem, weil du automatisch die selben Cookies etc. hast.

Das mit dem DocumentCompleted Event funktioniert zumindest, habe es eben ausprobiert. Die Seite ist komplett geladen, du kannst dir den Source Code zur Überprüfung mit
PHP Code:
File.WriteAllText("source.txt"webBrowser1.DocumentText); 
ausgeben lassen.
pn'd bezüglich des captcha's.

probiere das ganze dann mal übern httpclient, mal schauen wie weit ich komme.
01/12/2015 00:42 teto#7
Hier habe ich dir mal ein Projekt gemacht wo du Beispielhaft siehst wie es mit einer WebBrowser Komponente geht.

Exceptionhandling habe ich aber jetzt nicht mit eingebaut, das kannst du ja dann noch machen und die Nutzereingaben überprüfen.

[Only registered and activated users can see links. Click Here To Register...]

Bild