在JavaFX Webview中自动单击元素[a]

在JavaFX Webview中自动单击元素[a],webview,javafx,Webview,Javafx,我在JavaFXWebView工作,我想自动点击一个元素[a]来做一些事情,但我失败了。这是我的密码 爪哇 你的代码对我有用。发布您的异常stacktrace以便我们可以看到错误。我已经发布了我的异常stacktrace。你现在可以看到了。顺便问一下,你能告诉我jdk的版本吗。我想更改另一个jdk版本以重试。我使用的是jdk 1.8_25。我没有任何例外。此外,我还添加了eng.setOnAlerte->System.out.printlne.getData;在Java端跟踪来自JavaScri

我在JavaFXWebView工作,我想自动点击一个元素[a]来做一些事情,但我失败了。这是我的密码

爪哇


你的代码对我有用。发布您的异常stacktrace以便我们可以看到错误。我已经发布了我的异常stacktrace。你现在可以看到了。顺便问一下,你能告诉我jdk的版本吗。我想更改另一个jdk版本以重试。我使用的是jdk 1.8_25。我没有任何例外。此外,我还添加了eng.setOnAlerte->System.out.printlne.getData;在Java端跟踪来自JavaScript的警报消息,它会按预期给我“123”。谢谢你的帮助,我使用另一台PC,它工作正常……
    package webviewbrowser;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class WebViewTest1 extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        StackPane root = new StackPane();
        WebView view = new WebView();
        final WebEngine eng = view.getEngine();
        eng.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {
            @Override
            public void changed(ObservableValue<? extends Worker.State> ov, Worker.State oldState, Worker.State newState) {
                if (newState == Worker.State.SUCCEEDED) {
                    eng.executeScript("document.getElementById('abc').click();");
                }
            }
        });
        eng.load("file:///E:\\index.html");
        root.getChildren().add(view);
        Scene scene = new Scene(root, 800, 600);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>index</title>
        <script type="text/javascript">
            function abc() {
                alert(123);
            }
        </script>
        <style>

        </style>
    </head>
    <body>
        <a href="javaScript:void(0)" onclick="abc()" id="abc">ttt</a>
    </body>
</html>
netscape.javascript.JSException: TypeError: 'undefined' is not a function
    at com.sun.webpane.platform.WebPage.twkExecuteScript(Native Method)
    at com.sun.webpane.platform.WebPage.executeScript(WebPage.java:1438)
    at javafx.scene.web.WebEngine.executeScript(WebEngine.java:811)
    at webviewbrowser.WebViewTest1$1.changed(WebViewTest1.java:24)
    at webviewbrowser.WebViewTest1$1.changed(WebViewTest1.java:20)
    at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:196)
    at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:100)
    at javafx.beans.property.ReadOnlyObjectWrapper$ReadOnlyPropertyImpl.fireValueChangedEvent(ReadOnlyObjectWrapper.java:195)
    at javafx.beans.property.ReadOnlyObjectWrapper.fireValueChangedEvent(ReadOnlyObjectWrapper.java:161)
    at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:130)
    at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:163)
    at javafx.scene.web.WebEngine$LoadWorker.updateState(WebEngine.java:975)
    at javafx.scene.web.WebEngine$LoadWorker.dispatchLoadEvent(WebEngine.java:1086)
    at javafx.scene.web.WebEngine$LoadWorker.access$600(WebEngine.java:968)
    at javafx.scene.web.WebEngine$PageLoadListener.dispatchLoadEvent(WebEngine.java:955)
    at com.sun.webpane.platform.WebPage.fireLoadEvent(WebPage.java:2356)
    at com.sun.webpane.platform.WebPage.fwkFireLoadEvent(WebPage.java:2204)
    at com.sun.webpane.webkit.network.URLLoader.twkDidFinishLoading(Native Method)
    at com.sun.webpane.webkit.network.URLLoader.access$1300(URLLoader.java:44)
    at com.sun.webpane.webkit.network.URLLoader$6.run(URLLoader.java:691)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:76)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:17)
    at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:67)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "JavaFX Application Thread"