[C#] Webbrowser automatisch per Code steuern / Klicken lassen

Drucken
( 3 Votes )
Hauptkategorie: Programmieren Kategorie: C#
Erstellt am 09.02.2012 Zuletzt aktualisiert am 13.02.2012 Geschrieben von Jonny132
In diesem Tutorial zeige ich euch wie ihr das WebBrowser Control per Code 'fernsteuern' könnt, um zum Beispiel einen Klick auf einen Link / Button auszuführen - Und das voll automatisch.

Erstellt eine neue Forms - Anwendung und zieht das Webbrowser-Control darauf. Am besten ihr setzt die Docking - Eigenschaft auf Fill damit das Webbrowser-Control immer die Größe der Form hat.

Wechselt nun in die Codeansicht.

Im Form - Load Event abboniert ihr zuerst das DocumentCompleted - Ereignis des Webbrowser-Controls und lässt es danach auf eure Seite Navigieren auf der ihr automatisch einen Klick  auf einen Link oder einen Submit-Button ausführen wollt.
Das DocumentCompleted - Ereignis wird ausgeführt sobald der ganze Content der Seite geladen wurde. In Einzelfällen funktioniert dieses Event nicht. Für diesen Fall könnte man noch das Navigated-Ereignis des WebBrowser-Controls versuchen. 

Form - Load Ereignis

    private void Form1_Load(object sender, EventArgs e)
{
  webBrowser1.Navigate("deineWebsite");
  webBrowser1.DocumentCompleted += 
      new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
}
Nehmen wir als Beispiel einen Link dem wir automatisch folgen wollen. Der Linkcode im Quelltext sieht Beispielsweise so aus:
<a onclick="alert('Link geklickt')" id="link">Bitte klicken</a>
Basierend auf diesen Quelltext sieht das DocumentCompleted-Ereignis so aus:
void webBrowser1_DocumentCompleted(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
  webBrowser1.Document.GetElementById("link").InvokeMember("click");
}
Hier holen wir uns aus dem Document, das geladen wurde, das Element mit der ID link und führen per InvokeMember einen Klick auf diesem Element aus.

Sonderfall ohne ID

Was aber wenn wir keine ID zur Verfügung haben auf die wir Zugreiffen können?
Für diesen Fall müssen wir etwas trixen um an das Element ranzukommen.
 
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
  HtmlElementCollection htmlElements = webBrowser1.Document.GetElementsByTagName("a");
  foreach (HtmlElement item in htmlElements)
  {
    if (item.InnerText.Contains("Bitte klicken"))
    {
      item.InvokeMember("click");
    }
  }
}
Zuerst holen wir uns alle Elemente aus dem Document die den Tag 'a' haben in eine HtmlElementCollection.
Danach iterieren wir über alle Elemente und überprüfen mittels if-Abfrage ob der Eintrag den Text "Bitte klicken" enthält und somit haben wir unseren Link den wir wieder mittels InvokeMember klicken können.


Automatisierter Klick auf Link

    Veröffentlichen Sie ihre Kommentare ...