我想自动填充两个文本字段并模拟按钮单击以自动登录网站。我正在使用 JavaFX WebView 及其函数 .executeScript()
这就是我到目前为止所得到的:(参考 Sergey 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 将在无限循环中执行。我也不知道为什么会有一个 Listener。需要说的是,我已经将我的脚本复制到了 Sergey Grinev 的脚本中,因为这对我有用。否则,通过简单地调用 executeScript,它会抛出java.lang.reflect.InvocationTargetException
等等。
如何在没有永久循环的情况下执行我的脚本,为什么没有侦听器它就无法工作?
感谢您的阅读和亲切的问候