Mausklick in einem webbrowser control simulieren

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Mausklick in einem webbrowser control simulieren

    Hallo in die Runde,

    ich bin Andre aus Essen, neu hier im Forum und in Sachen VB .net, naja, sagen wir mal ehrgeizig unterwegs :)
    Seit ein paar Tagen komme ich bei einer Thematik nicht weiter und ich hoffe ihr könnt mir helfen.

    Ich möchte gerne eine Webseite von einer IP-Kamera steuern. Es handelt sich hier um eine Wanscam IPCam HW0026 und diese beinhaltet einen Webserver für Konfigs und Livestreams etc. Die Kamera hat eine "two way audio"-Funktion, heißt, man kann bidirektional mit der Kamera sprechen. Dafür kann man mit den Internet Explorer auf die Kamera zugreifen und ein ActiveX (ocx) nutzen. Das ActiveX wird im IE geladen und bietet einen "Talk"-Button. Nun will ich mit einer Windows-Form und einem Webbrowser-Control auf die Kamera zugreifen und den Talk-Button ansteuern. Momentan habe ich das mit X,Y-Koordinaten gelöst und führe den Mauszeiger auf die Taste und klicke sie.

    Eleganter wäre es aber, wenn ich die Taste direkt anspreche, bzw. das Javascript hinter der Taste auslöse. Mein Programm soll nämlich auch dann noch funktionieren, wenn der Rechner gesperrt ist. Im gesperrten Zustand ist das mit den Maus-Koordinaten ja nutzlos ;)

    Ich habe mehrere Beispiele aus dem Netz probiert (InvokeScript, InvokeMember, ExecScript, RaiseEvent) aber keine Lösung steuert den Button an.

    Um zum Button zu gelangen, muss erst noch eine Unterseite aufgerufen werden. Auch diese kann ich nicht direkt aufrufen:

    <td height="29" class="cs5" style="padding-left: 30px;" scope="row">
    <strong>
    <span style="color: rgb(143, 195, 31); cursor: pointer;" onmouseover="this.style.color='#8fc31f'" onmouseout="this.style.color='#4B4B4B'"onclick="javascript:signin_activex()">
    <script>document.write(str_for_ie_h264);</script>
    livestream mode (for Internet Explorer)
    </span>&nbsp;&nbsp;&nbsp;&nbsp;
    </strong> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    </td>


    function signin_activex()
    {
    location='monitor.htm';
    }


    Auf der nächsten Seite ist nun der "Talk"-Button:

    <td width="61" align="center">
    <img name="talk" width="50" height="50" title="talk" class="cs" id="talk" onclick="talk_onclick()" src="images/icon02.gif">
    </td>


    function talk_onclick()
    {
    if(video[nCurSel].TalkState == 0) {if(video[nCurSel].StartTalk()!=-1) $("#talk").attr("src","images/icon02_click.gif");}
    else {if(video[nCurSel].StopTalk()!=-1) $("#talk").attr("src","images/icon02.gif");}
    }


    Habt ihr einen Tipp für mich, warum folgende Lösungswege nicht funktionieren?

    WebBrowser1.Document.InvokeScript("talk_onclick()")

    WebBrowser1.Document.Window.DomWindow.execscript("talk_onclick()")

    WebBrowser1.Document.GetElementById("talk").Invokescript("click")

    WebBrowser1.Document.GetElementById("talk").RaiseEvent("onmouseover")

    WebBrowser1.Document.GetElementById("talk").RaiseEvent("onclick")


    Vielen Dank im Voraus!
    Hallo und willkomen im Forum.

    Bitte benutze die CodeTags das nächste mal.

    Schon mal so probiert? webBrowser1.Document.All("talk").InvokeMember("click");

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo Nofear23m,

    vielen Dank für Deine Mithilfe!

    Leider wirft der Befehl von Dir folgenden Fehler:

    System.NullReferenceException: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."
    System.Windows.Forms.HtmlElementCollection.this[string].get hat Nothing zurückgegeben.


    Ich bin echt ratlos und verstehe auch nicht, wie ich den richtigen Abschnitt in der HtmlElementCollection finden kann.
    Kennst Du eine Möglichkeit, wie ich durch den Webseiten-Quellcode via VB durchgehen kann und den richtigen Abschnitt finden kann? Wenn ich den gefunden habe, dann müsste ein InvokeMember("click") ja greifen.
    Ich habe eine Lösung gefunden. Das Problem war, dass das Element was ich klicken will, in einem iframe ist.

    So klicke ich nun auf der ersten Webseite den Eintrag für den Aufruf der zweiten Seite:
    WebBrowser1.Document.Window.Frames(0).Document.GetElementsByTagName("span").Item(0).InvokeMember("click")

    Auf der zweiten Seite klicke ich so den Talk-Button
    WebBrowser1.Document.Window.Frames(0).Document.GetElementById("talk").InvokeMember("click")

    Danke Nofear23m für Deine Unterstützung!
    Gerne

    AndreNRW schrieb:

    dass das Element was ich klicken will, in einem iframe ist.

    Das ging hald aus dem kleinen HTML-codefragment leider nicht hervor ;)

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##