我正在研究一个Eclipse插件,该插件在SWT浏览器中加载URL。浏览器中呈现的页面具有隐藏的html属性。要求是读取隐藏属性的值。
Browser browser = new Browser(shell, SWT.NONE);
browser.setUrl("www.<my_url>.com");
我尝试使用statusTextListener在DOM上执行查询
browser.addStatusTextListener(new StatusTextListener() {
public void changed(StatusTextEvent event) {
browser.setData("query", event.text);
}
});
browser.addProgressListener(new ProgressListener() {
public void completed(ProgressEvent event) {
boolean result = browser
.execute("window.status=document.getElementById('main').childNodes[0].nodeValue;");
if (!result) {
/* Script may fail or may not be supported on certain platforms. */
System.out.println("Script was not executed.");
return;
}
String value = (String) browser.getData("query");
System.out.println("Node value: " + value);
}
});
但是,这似乎不起作用。如果我尝试在浏览器而不是URL中加载HTML文本,则效果很好。 知道如何在页面加载完成后从SWT浏览器读取DOM元素吗?
答案 0 :(得分:2)
使用Browser::evaluate
在文档的上下文中执行Javascript并将结果返回给调用方。
要获取示例中main
元素的第一个子元素的值,请按以下步骤开始:
String script = "<Javascript to return an array of hidden attribute names>";
Object result = browser.evaluate(script);
但是,受支持的结果类型仅限于string
,number
和boolean
-以及这些类型的数组。计算结果为null
或undefined
的Javascript将返回null
。
因此,您将需要调整查询DOM的Javascript以返回受支持的类型。