2 つのテキストフィールドを自動的に入力し、ボタンクリックをシミュレートして、Web サイトに自動的にログインしたいと考えています。JavaFX WebView とその関数 .executeScript() を使用しています
これは私がこれまでに得たものです:(この質問に対する Sergey Grinevs の回答を参照: JavaFX プログラムから WebView の Javascript 関数を実行する)
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 は無限ループで実行されます。さらに、リスナーが存在する理由もわかりません。それがうまくいったので、私は自分のスクリプトをセルゲイ・グリネフのスクリプトにコピーしたと言う必要があります。それ以外の場合は、単に executeScript を呼び出すだけでスローされjava.lang.reflect.InvocationTargetException
ます。
永久ループなしでスクリプトを実行するにはどうすればよいですか? また、リスナーがないと機能しないのはなぜですか?
読んでくれてありがとう