我不确定如何提出这个问题,但这是我想要做的。我正在寻找能够在java应用程序中加载网站,并能够单击按钮,文本,框等,并获取底层DOM代码。
例如:
- 它加载google.com的网页以及它下面的LIVE DOM,不同的框架。它不能是HTML,因为谷歌是javascript。
- 我想点击谷歌搜索框或页面上的任何内容,应用程序将打印任何属性,例如name =“q”或q。
我已经研究过XULrunner,但它已被弃用于java。
答案 0 :(得分:0)
您可以使用JavascriptExecutor
。它由所有WebDrivers实现。有关详细信息,请参阅JavaDoc。使用document
来引用DOM。
答案 1 :(得分:0)
您可以使用JavaFX WebView。 您可以从Javascript回调Java代码。因此,您可以编写少量Javascript来检测用户何时单击元素,并调用一些显示属性值的Java代码。请参阅"从Javascript"回调Java在WebEngine API docs。
示例代码:
public class HTMLMouseOverTest extends Application {
@Override
public void start(Stage primaryStage) {
final BorderPane root = new BorderPane();
final WebView webView = new WebView();
final WebEngine engine = webView.getEngine();
final BooleanProperty mouseOver = new SimpleBooleanProperty();
engine.getLoadWorker().stateProperty().addListener(new ChangeListener<State>() {
@Override
public void changed(ObservableValue<? extends State> observable,
State oldValue, State newValue) {
if (newValue == State.SUCCEEDED) {
// Here's how to add the Javascript if you don't have
// direct access to the HTML:
// final Document doc = engine.getDocument();
// Element div = doc.getElementById("important-div");
// div.setAttribute("onmouseover", "mouseOverProperty.set(true)");
// div.setAttribute("onmouseout", "mouseOverProperty.set(false)");
final JSObject window = (JSObject) engine.executeScript("window");
window.setMember("mouseOverProperty", mouseOver);
}
}
});
engine.loadContent("<html><body style='font-family:sans-serif';><h2>Hello World</h2>"+
"<div id='important-div' onmouseover='mouseOverProperty.set(true)'"+
"onmouseout='mouseOverProperty.set(false)' style='background: #ffd; padding:40px;'>"+
"Move mouse here</div>"+
"<h3>Thanks and good night</h3></body></html>");
root.setCenter(webView);
final Label label = new Label();
label.textProperty().bind(Bindings.when(mouseOver).then("Mouse in position").otherwise("Mouse out of area"));
root.setBottom(label);
final Scene scene = new Scene(root, 400, 250);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}