我希望我的应用程序自动登录网站kolotibablo,但该网站不存在标签形式。我该怎么办才能提交?感谢。
display: flex;
flex-direction: column;
答案 0 :(得分:2)
我使用下面的代码成功完成了这项工作。我没有使用你的engine.documentPorperty()
监听器,所以我完全删除了该代码。
在this answer的帮助下,我能够进行一些编辑。
engine.getLoadWorker().stateProperty().addListener((ov, oldState, newState) -> {
if ( newState == Worker.State.SUCCEEDED ) {
Element login = engine.getDocument().getElementById("login");
if ( login != null ) {
login.setAttribute( "Value", "User_Name" );
System.out.println(login.getAttribute("Value"));
}
Element password = engine.getDocument().getElementById( "password" );
if ( password != null ) {
password.setAttribute( "Value", "Password" );
System.out.println(password.getAttribute("Value"));
}
HTMLElementImpl loginButton = (HTMLElementImpl) engine.getDocument().getElementById( "login_button" );
if ( loginButton != null ) {
loginButton.addEventListener("click", event -> {
System.out.println("here " + event.getType());
}, false);
loginButton.click();
}
}
});
所以这将等到工作人员状态成功,然后抓住login
元素,设置属性,抓取password
元素,设置属性,抓住loginButton
as一个HTMLElementImpl
,它允许我们模拟对它的点击。
我已经留在了打印声明中,以便您可以看到事情正在发生。
希望这有帮助。
编辑1
所以我重新审视了这个问题,我也提出了这个解决方案
String username = "User_Name";
String password = "Password";
String enterUserName = "document.getElementById('login').value='" + username + "';";
String enterPw = "document.getElementById('password').value='" + password + "';";;
engine.getLoadWorker().stateProperty().addListener((ov, oldState, newState) -> {
if ( newState == Worker.State.SUCCEEDED ) {
engine.executeScript(enterUserName);
engine.executeScript(enterPw);
}
});
我唯一想知道的是如何点击login
按钮。我试过的一切都失败了。所以,我很抱歉。但是,这是另一种方法。
答案 1 :(得分:1)
请使用
HTMLFormElement loginForm =(HTMLFormElement)webEngine.getDocument()。getElementById(" Login"); loginForm.submit(); 强> 要登录,您必须提交表格,在上面的代码"登录"是表单id