Cefsharp webbrowser发送输入

时间:2017-10-23 21:56:07

标签: javascript vb.net visual-studio getelementbyid cefsharp

我希望能够在我的cefsharp(铬)webbrowser中模拟对网页元素的点击或键盘输入。

假设我想输入"堆栈溢出,"例如,进入谷歌搜索框。我希望能够将该键盘输入模拟到谷歌搜索框web元素中,以便搜索框显示"堆栈溢出"它会像人类输入的堆栈溢出一样。"

研究:我已经找到了在visual studio web元素中执行此操作(未经测试)的方法,但不是铬。作为参考,我找到的代码是browser.Document.GetElementById('web element').InvokeMember("Click")但是,我不知道它是否或如何工作。

我还找到了ExecuteScriptAsync函数,但我不知道如何使用它。 我很确定我需要使用execucriptasync ,但我不确定我会使用哪些参数。

我的设置: 我正在使用visual basic,visual studio和cefsharp chrome-based web browser

问题:重申一下,我希望能够在cefsharp浏览器中模拟某些网页元素的按键和鼠标点击。

1 个答案:

答案 0 :(得分:0)

这不是我的答案:我从@shudel复制了它,谢谢你@shudel 但是,我想确保这个问题得到解答。

使用ExecuteScriptAsync将针对Chrome引擎执行JavaScript,因此您必须向此函数发送有效的JavaScript。以下代码显示了如何使用DuckDuckGo

开始搜索
Imports System.Threading
Imports CefSharp
Imports CefSharp.WinForms

Public Class Form1
  Private _browser As New ChromiumWebBrowser()


  Sub New()
    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
_browser.Top = 10
_browser.Left = 10
_browser.Width = 600
_browser.Height = 400
Controls.Add(_browser)
  End Sub


  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles 
Button1.Click
    _browser.Load("https://duckduckgo.com/")
'for simplicity just wait until page is downloaded, should be handled by LoadingStateChanged
Thread.Sleep(3000)
    Dim jsScript As String = <js><![CDATA[
    document.all("q").value = "stack overflow";
    document.all("search_button_homepage").click();
                         ]]></js>.Value
_browser.ExecuteScriptAsync(jsScript)
  End Sub


End Class`