【问题标题】:Click a button in CefSharp browser in Windows Forms在 Windows 窗体中单击 CefSharp 浏览器中的按钮
【发布时间】:2020-04-01 10:56:36
【问题描述】:

我正在尝试单击网页上的按钮 (kahoot.it),并且我已经知道我可能需要使用 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 c# html winforms cefsharp


【解决方案1】:

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

页面加载后运行脚本

要在页面加载后运行代码,可以使用ExecuteScriptAsyncWhenPageLoaded方法,也可以处理FrameLoadEnd或LoadingStateChanged。

DOM 操作 - 查找元素、设置值、点击按钮

对于 javascript 代码,您可以使用任何可用的 javascript 函数。例如使用getElemenetsByName、getElementsByTagName 或getElementById 查找元素。

找到元素后,您可以设置它的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();
    ";

【讨论】:

  • 非常感谢!我将如何运行相同的脚本但在单击 WinForms 上的按钮时触发它?
  • 不客气。处理按钮的Click 事件。然后在事件处理程序中,写var script = ...; 然后browser.ExecuteScriptAsync(script);。
  • 谢谢!!现在我还有一个问题。该站点似乎无法识别文本框中的输入。当我运行代码时,它给了我一个错误,当文本框为空时给出,但是当我手动输入它时,它给了我另一个错误(这没关系,我想要的结果)。
  • CefSharp API Doc 链接有点到处都是,引用了三个不同的版本,其中没有一个是当前版本 75.1.x。还有一个链接是针对OffScreen 版本的,而不是WinForms。对于一般参考 cefsharp.github.io/api 包含所有 API 文档的列表,请使用匹配的版本(文档是特定于版本的)。
  • @RezaAghaei 链接已修复。总的来说,一个非常详细的答案:+1:
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-08-06
    • 2012-08-24
    • 2020-06-23
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多