【问题标题】:Java CEF - Is it possible to access DOM document and elements of loaded page?Java CEF - 是否可以访问加载页面的 DOM 文档和元素?
【发布时间】:2017-01-26 11:06:10
【问题描述】:

我已经从 https://bitbucket.org/chromiumembedded/java-cef/overview 构建了 java-cef,但我仍然无法在 docs 和 javadocs 中找到有关如何访问 DOM 文档和加载页面的元素的任何信息。

我需要通过document.getElementsByClassName("example");document.getElementsByTagName("div"); 之类的方式访问元素。

类似于 JSoup 中的东西 - https://jsoup.org/cookbook/extracting-data/selector-syntax

File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");

Elements links = doc.select("a[href]"); // a with href
Elements pngs = doc.select("img[src$=.png]");

Java-CEF 中是否有相同的功能?

谢谢!

【问题讨论】:

    标签: java chromium-embedded


    【解决方案1】:

    您需要将负载处理程序附加到 CEF 客户端并在处理程序内调用 CefBrowser::executeJavaScript(String code),例如:

    cefClient.addLoadHandler(new LoadHandler());
    ...
    class LoadHandler extends CefLoadHandlerAdapter {
        @Override
        public void onLoadEnd(CefBrowser browser, int frameId, int status) {
            String jscode = "var x = document.getElementsByClassName('example')";
            browser.executeJavaScript(jscode);
        }
    }
    

    更新

    如果你想在你的 Java 代码中接收来自浏览器脚本的事件,你需要注册一个调用 cefQueryCefBrowser::executeJavaScript(String code),在一个参数中传递所有必要的数据,并使用消息路由器接收它,例如:

    CefMessageRouter msgRouter = CefMessageRouter.create();
    msgRouter.addHandler(new MessageRouterHandler(), true);
    cefClient.addMessageRouter(msgRouter);
    ...
    browser.executeJavaScript("cefQuery('Hello World')");
    ...
    class MessageRouterHandler extends CefMessageRouterHandlerAdapter {
        @Override
        public boolean onQuery(CefBrowser browser, long query_id, String request, boolean persistent, CefQueryCallback callback) {
            System.out.println(request); // prints "Hello World"
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-05-14
      • 2013-06-26
      • 1970-01-01
      • 2018-01-09
      • 2020-01-15
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      相关资源
      最近更新 更多