在 Windows 表单中单击 CefSharp 浏览器中的按钮

Click a button in CefSharp browser in Windows Forms

我正在尝试单击网页上的按钮 (kahoot.it),我已经知道我可能需要使用 Javascript,只要它保持不变就可以了用 1 行 JavaScript 因为这很容易在 WinForms 中实现。我没有太多关于按钮的信息, 只有:

<button type="submit" value="Submit" class="enter-button__EnterButton-sc-1o9b9va-0 kxpxeu" data-functional-selector="join-game-pin"><span>Enter</span></button>

你们能帮忙吗?页面上只有一个按钮,也许有帮助。

您需要编写一段 javascript 代码并在页面加载时 运行 它。

运行 页面加载后的脚本

要运行页面加载后的代码,可以使用ExecuteScriptAsyncWhenPageLoaded method or you can handle FrameLoadEnd or LoadingStateChanged.

DOM操作——查找元素,设置值,点击按钮

对于 javascript 代码,您可以使用任何可用的 javascript 函数。例如使用 getElemenetsByNamegetElementsByTagNamegetElementById.

查找元素

找到元素后,您可以设置它的 value 或者例如,对于一个按钮,您可以通过调用它的 click() 方法来点击它。

CefSharp 示例 - 浏览 URL、填写输入并单击按钮

以下代码将 ChromiumWebBrowser 控件添加到 Form。然后它浏览 google 并用文本填充搜索框并单击搜索按钮:

//using CefSharp;
//using CefSharp.WinForms;
ChromiumWebBrowser browser;
protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    browser = new ChromiumWebBrowser("https://www.google.com/");
    browser.Dock = DockStyle.Fill;
    Controls.Add(browser);
    var script = @"
            document.getElementsByName('q')[0].value = 'CefSharp C# Example';
            document.getElementsByName('btnK')[0].click();
        ";
    browser.ExecuteScriptAsyncWhenPageLoaded(script);
}

示例 2

在以下示例中,使用 ExecuteScriptAsync 您可以用文本填充搜索框并以编程方式单击搜索按钮:

//using CefSharp;
//using CefSharp.WinForms;
ChromiumWebBrowser browser;
protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    browser = new ChromiumWebBrowser("https://www.google.com/");
    browser.Dock = DockStyle.Fill;
    Controls.Add(browser);
}
private void button1_Click(object sender, EventArgs e)
{
    var script = @"
        document.getElementsByName('q')[0].value = 'CefSharp C# Example';
        document.getElementsByName('btnK')[0].click();
    ";
    browser.ExecuteScriptAsync(script);
}

注意: 在您的情况下,对于 kahoot.it,脚本应该是:

var script = @"
        document.getElementById('game-input').value = '123';
        document.getElementsByTagName('button')[0].click();
    ";

Target Framework 版本从 4.0 更改为 4.7.2 已为我修复 True Target Framework Version