gpt4 book ai didi

Java CEF - 是否可以访问 DOM 文档和加载页面的元素?

转载 作者:行者123 更新时间:2023-12-02 03:05:02 25 4
gpt4 key购买 nike

我已经从 https://bitbucket.org/chromiumembedded/java-cef/overview 构建了 java-cef ,但我仍然在 docs 和 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]");

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);
}
}

更新

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

CefMessageRouter msgRouter = CefMessageRouter.create();
msgRouter.addHandler(new MessageRouterHandler(), true);
cefClient.addMessageRouter(msgRouter);
...
browser.executeJavaScript("cefQuery({request: '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"

return true;
}
}

关于Java CEF - 是否可以访问 DOM 文档和加载页面的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41872128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com