c# - CefSharp网页元素点击

标签 c# click cefsharp

我正在尝试对某些页面元素(如 btn 或链接)进行简单的点击。

我已经编写了 2 个通过 xpath 和 CSS 选择器点击的函数。

这两个功能在浏览器的开发人员控制台中都能完美运行,但在 CEF 中部分不起作用。

  • 在来自 Developer Console 和 Cef 的简单链接中完美点击代码
  • 代码完美地点击了来自 Developer Console 的精确按钮,但没有点击来自 CEF 的按钮。它只是出于某种原因忽略它...

这怎么可能? js代码完全一样!...

    public void Click(string xpath)
    {
        var js = "document.evaluate(\"" + xpath + "\", document, null, XPathResult.ANY_TYPE, null).iterateNext().click();";

        EvaluateJavascript(js);
    }

    public void ClickCss(string css)
    {
        var js = "document.querySelector('"+ css + "').click()";

        EvaluateJavascript(js);
    }


    public async Task EvaluateJavascript(string script)
    {
        JavascriptResponse javascriptResponse = await Browser.GetMainFrame().EvaluateScriptAsync(script);

        if (!javascriptResponse.Success)
        {
            throw new JavascriptException(javascriptResponse.Message);
        }
    }

细节: enter image description here

enter image description here

使用的点击代码:

_browser.ClickCss("#upload-container a");

又一次:相同的 js 代码在浏览器开发控制台中完美运行,但由于某种原因在 CEF 中不起作用。

顺便说一下,我已经在 Chrome 中测试了 JS 代码。所以 WebEngine 在这两种情况下都是一样的。

PS:我也可以模拟将某些特定文件拖放到某些特定网络元素。但是我没有找到任何关于这不是Cef,不是Js,不是JQuery的信息...... =(

最佳答案

问题在于 JS 代码的安全限制。

问题的解决方法是:

  1. 使用 JS 代码获取按钮/链接的坐标
  2. 使用 CEF 模拟点击操作:

    public void MouseClick(int x, int y)
    {
        Browser.GetBrowser().GetHost().SendMouseClickEvent(x, y, MouseButtonType.Left, false, 1, CefEventFlags.None);
        Thread.Sleep(15);
        Browser.GetBrowser().GetHost().SendMouseClickEvent(x, y, MouseButtonType.Left, true, 1, CefEventFlags.None);
    }
    

关于c# - CefSharp网页元素点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51680724/

相关文章:

c# - 有没有办法加快在 winforms 文本框中显示大量文本的速度?

javascript - 当文本达到最小/最大大小时,使用 JavaScript 禁用 HTML 按钮

javascript - 在 Google map 中点击多边形内部

javascript - 检测网页上的合成点击

Cef 扩展脚本的 Javascript 全局变量

c# - cefsharp 位置更改事件 C#

c# - 应用程序见解和标签

c# - XSD2Code 类需要包含元素集合的重名元素

c# - 跨方法边界的 LINQ to SQL 规则

c#-4.0 - 如何为快捷键实现键盘处理程序 cefSharp