代码之家  ›  专栏  ›  技术社区  ›  Andrew_STOP_RU_WAR_IN_UA

CefSharp网页元素点击

  •  2
  • Andrew_STOP_RU_WAR_IN_UA  · 技术社区  · 6 年前

    我正在尝试简单地点击某个页面元素(如btn或链接)。

    我编写了两个函数,分别用于通过xpath和CSS选择器单击。

    这两个功能在浏览器的开发人员控制台中都能很好地工作,但在CEF中部分不能工作。

    • 从开发人员控制台和Cef的简单链接中编写完美的click代码
    • 代码完美地点击了开发人员控制台上的确切按钮,但没有点击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在这两种情况下都是一样的。

    另外,我还可以模拟一些特定的文件拖放到一些特定的web元素。但我没有找到任何关于这方面的信息,不是Cef的,不是Js的,不是JQuery的。。。=(

    1 回复  |  直到 6 年前
        1
  •  3
  •   Andrew_STOP_RU_WAR_IN_UA    6 年前

    问题在于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);
      }