Cefsharp 网络浏览器发送输入

Cefsharp webbrowser send input

我希望能够在我的 cefsharp (chromium) 网络浏览器中模拟对网络元素的点击或键盘输入。

假设我想在 google 搜索框中输入 "stack overflow,"。我希望能够将键盘输入模拟到 google 搜索框 Web 元素中,以便搜索框显示 "stack overflow" 并且它会像人类键入 "stack overflow."

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

我也找到了ExecuteScriptAsync这个功能,但是不知道怎么用。 我很确定我需要使用 executescriptasync,但我不确定我会使用什么参数。

我的设置: 我正在使用 visual basic visual studio 和基于 chromium 的 cefsharp Web 浏览器

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

这不是我的回答:我是从@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`