Ich möchte zwei Textfelder automatisch ausfüllen und einen Buttonklick simulieren, um mich automatisch auf einer Website einzuloggen. Ich bin mit der JavaFX WebView und seine Funktion .executeScript()Javascript in JavaFX mit WebEngine.executeScript() ausführen
Das ist, was ich bisher habe: (auf Antwort Sergey Grinevs auf diese Frage verweis: 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');");
}
}
});
Bisher Dies funktioniert aber das Javascript wird in einer Endlosschleife ausgeführt werden. Ich weiß außerdem nicht, warum es einen Zuhörer gibt. Ich muss sagen, dass ich mein Skript in das Skript von Sergey Grinev kopiert habe, da das für mich funktioniert hat. Andernfalls wird durch einfaches Aufrufen von executeScript java.lang.reflect.InvocationTargetException
und viele mehr geworfen.
Wie kann ich mein Skript ohne eine permanente Schleife ausführen und warum funktioniert es nicht ohne den Zuhörer?
Danke fürs Lesen und freundlichen Grüßen