自動的に2つのテキストフィールドを入力し、自動的にWebサイトにログインするためのボタンクリックをシミュレートします。 は私がのJavaFXのWebViewとその機能.executeScriptを使用しています()WebEngine.executeScript()を使用してJavaFXでJavascriptを実行
これは私がこれまで持っているものである:(この質問にセルゲイGrinevs答えを参照のうえ:Execute a Javascript function for a WebView from a JavaFX program)これまで
webEngine.load("websiteexample.com");
webEngine.getLoadWorker().stateProperty().addListener(
new ChangeListener<State>() {
@Override
public void changed(ObservableValue ov, State oldState, State newState) {
if (newState == State.SUCCEEDED) {
webEngine.executeScript(
"function login(user,pass){"
+ " var usernameField = document.getElementById(\"username\");"
+ " var passwordField = document.getElementById(\"password\");"
+ " usernameField.value = user;"
+ " passwordField.value = pass;"
+ " var sButton = document.getElementById(\"submit\");"
+ " sButton.click();"
+ "}"
+ "login('abc','123');");
}
}
});
これは動作しますが、JavaScriptはで無限ループで実行されます。私はさらに、なぜリスナーがあるのか知らない。 Sergey Grinevのスクリプトに私のスクリプトをコピーしたのは、それが私のために働いて以来のことです。 それ以外の場合は、executeScriptを呼び出すだけで、java.lang.reflect.InvocationTargetException
以上のものが送出されます。
恒久ループなしでスクリプトを実行するにはどうすればよいですか?リスナーなしでスクリプトが実行されないのはなぜですか?私はあなたの質問を理解していれば、問題の第二部への答えは、「なぜそれがリスナーなしで動作しない」読書や種類について