我正在尝试对某些页面元素(如 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);
}
}
使用的点击代码:
_browser.ClickCss("#upload-container a");
又一次:相同的 js 代码在浏览器开发控制台中完美运行,但由于某种原因在 CEF 中不起作用。
顺便说一下,我已经在 Chrome 中测试了 JS 代码。所以 WebEngine 在这两种情况下都是一样的。
PS:我也可以模拟将某些特定文件拖放到某些特定网络元素。但是我没有找到任何关于这不是Cef,不是Js,不是JQuery的信息...... =(
最佳答案
问题在于 JS 代码的安全限制。
问题的解决方法是:
- 使用 JS 代码获取按钮/链接的坐标
使用 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/