2017-01-26 35 views
0

Я построил java-cef от https://bitbucket.org/chromiumembedded/java-cef/overview, но я до сих пор не могу найти информацию в документах и ​​javadocs о том, как получить доступ к документу DOM и элементам загруженной страницы.Java CEF - Возможно ли получить доступ к документу 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?

Спасибо!

ответ

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

UPDATE

Тогда, если вы хотите получать события из сценария браузера в вашем 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" 
    } 
}