[英]Executing a Javascript in JavaFX using WebEngine.executeScript()
我想自動填充兩個文本字段,並模擬一個buttonclick來自動登錄網站。 我正在使用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將在無限循環中執行 。 我還不知道為什么會有一個監聽器。 需要說的是,從那以后,我已經將自己的腳本復制到Sergey Grinev的腳本中。 否則,只需調用executeScript,它將引發java.lang.reflect.InvocationTargetException
等。
我如何在沒有永久循環的情況下執行腳本,為什么沒有偵聽器就無法運行腳本?
感謝您的閱讀和親切的問候
如果我理解您的問題,問題第二部分的答案“為什么沒有偵聽器不起作用”,是偵聽器通知您頁面已加載。 然后,它在加載成功時執行您指定的代碼( newState == State.SUCCEEDED
)。 因此,有一個偵聽器,以便在WebEngine報告已加載頁面后立即運行您的代碼 。 如果沒有偵聽器,則必須基於其他事件來選擇何時運行代碼,例如在頁面加載后單擊按鈕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.