我正在使用一个可以自动登录某些网站的JavaFX Web浏览器,我知道如何将数据设置为用户名和密码字段但是如何让它执行登录按钮点击? 这是我到目前为止所得到的:
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>
答案 0 :(得分:5)
这是一个集中的,非专业的例子......使用dom.w3c.Node。*包
HTMLInputElement element = (HTMLInputElement)myWebView.getEngine().getDocument().getElementsByTagName("input").item(0);
element.click();
找到一种方法来处理你正在寻找的对象,它会起作用。
答案 1 :(得分:2)
我没有尝试过,但它应该有效。想法是将jQuery添加到加载的页面,然后使用它来单击按钮。这篇文章解释了如何使用JS执行此操作:How Do I Add jQuery To Head With JavaScript?因此,对于Java应该是(我已将第一个答案复制到字符串中并使用Web引擎执行它):
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()");
这篇文章可以帮助您在WebView中调试JS:JAVAFX / WebView / WebEngine FireBugLite or Some other debugger?