我正在使用htmlunit
中的net.sourceforge.htmlunit
来模拟网络浏览器。我尝试登录Steam网络应用程序,但我遇到了问题。设置凭据后,我想使用click
方法:
final WebClient webClient = new WebClient();
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setRedirectEnabled(true);
webClient.setCookieManager(new CookieManager());
final HtmlPage loginPage = webClient.getPage(loginPageConfiguration.getLoginPageUrl());
final HtmlTextInput user = loginPage.getHtmlElementById(loginPageConfiguration.getLoginInputId());
user.setText(loginCredentials.getUsername());
final HtmlPasswordInput password = loginPage.getHtmlElementById(loginPageConfiguration.getPasswordInputId());
password.setText(loginCredentials.getPassword());
final HtmlPage afterLoginPage = loginPage.getHtmlElementById(loginPageConfiguration.getLoginButtonId()).click();
在成功登录后的普通浏览器中,它会重定向到http://store.steampowered.com/
,但afterLoginPage
仍在之前的登录页面中。
答案 0 :(得分:0)
在不知道页面并拥有访问凭据的情况下,我只能猜测。也许该应用程序是一个单页面应用程序,它使用ajax替换可视内容(可能与重定向相结合)。因为ajax是异步的,所以在点击之后和寻址页面之前等待一下可能会有所帮助。
通过检查真实浏览器的http通信(通过使用开发人员工具或使用像Charles这样的Web代理)来了解正在发生的事情也可能是一个很好的起点。您可以将其与HtmlUnit进行的通信进行比较(例如,启用HttpClient有线日志)。
另一个选项可能是javascript错误。请检查您的日志输出。