Art*_*hur 1 java chromium-embedded
我已经从https://bitbucket.org/chromiumembedded/java-cef/overview构建了 java-cef ,但我仍然无法在文档和 javadoc 中找到有关如何访问 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]");
Run Code Online (Sandbox Code Playgroud)
Java-CEF 中是否有相同的功能?
谢谢!
您需要将负载处理程序附加到 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);
}
}
Run Code Online (Sandbox Code Playgroud)
更新
然后,如果你想从浏览器接收脚本事件在Java代码中,你需要注册一个电话cefQuery用CefBrowser::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"
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2147 次 |
| 最近记录: |