Автоматическое нажатие кнопки в JavaFX Webview
Я работаю в браузере JavaFX, который может автоматически подключаться к некоторым сайтам, я знаю, как установить данные в поля имени пользователя и пароля, но как мне заставить его выполнить нажатие кнопки входа? Это то, что я получил так далеко:
String email = "document.getElementsByName('email')[0].value='MY_EMAIL';";
String pass = "document.getElementsByName('pass')[0].value='MY_PASSWORD';";
String login = "";
webEngine.executeScript(email);
webEngine.executeScript(pass);
webEngine.executeScript(login);
и это код JavaScript кнопки, на которую он должен нажать:
<label class="uiButton uiButtonConfirm" id="loginbutton" for="u_0_c"><input value="Aanmelden" tabindex="4" type="submit" id="u_0_c"></label>
2 ответа
Это концентрированный, неспециализированный пример... использует пакет dom.w3c.Node.*
HTMLInputElement element = (HTMLInputElement)myWebView.getEngine().getDocument().getElementsByTagName("input").item(0);
element.click();
Найдите способ справиться с объектом, который вы ищете, и он будет работать.
Я не пробовал это, но это должно работать. Идея состоит в том, чтобы добавить jQuery к загруженной странице, а затем использовать ее для нажатия кнопки. В этом посте объясняется, как это сделать с помощью JS: как добавить jQuery в голову с помощью JavaScript? Так что с Java это должно быть (я скопировал первый ответ в строку и выполнил его с помощью веб-движка):
String script = "script = document.createElement('script');\n" +
"\n" +
"script.onload = function() {\n" +
" // jQuery is available now\n" +
"};\n" +
"var head = document.getElementsByTagName(\"head\")[0];\n" +
"\n" +
"script.type = 'text/javascript';\n" +
"script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js';\n" +
"\n" +
"head.appendChild(script);";
webEngine.executeScript(script);
Это должно быть сделано правильно при инициализации WebView (через webEngine.getLoadWorker().stateProperty().addListener(...)
). Примечание: jQuery загружается асинхронно.
Теперь вы сможете нажать кнопку с помощью jQuery:
webEngine.executeScript("$('#buttonId')[0].click()");
Этот пост должен помочь вам отладить JS в WebView: JAVAFX / WebView / WebEngine FireBugLite или какой-нибудь другой отладчик?