Автоматическое нажатие кнопки в 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 или какой-нибудь другой отладчик?

Другие вопросы по тегам