阅读这个论坛有一段时间了,但刚刚注册,这是我的第一篇文章,非常感谢这里所做的出色工作。
我正在用 Java 编写一个程序,目的是使用 HtmlUnit 连接到我订阅的杂志之一,登录并搜索我感兴趣的文章。一旦我开始工作,它会向我发送一封电子邮件,但这与我的问题无关。
我无法登录工作:
- 我读了页面
- 找到登录按钮并单击它
- 在新页面中捕获结果,提取表单并提供用户名/密码,最后
- 点击登录按钮
如果您单击登录,则会出现一个弹出窗口。但我似乎无法捕捉到弹出窗口。
这是我的代码:
public void authenticate() throws MalformedURLException, IOException
{
LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog");
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF);
java.util.logging.Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.OFF);
WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_9);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getCookieManager().setCookiesEnabled(true);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setPopupBlockerEnabled(false);
webClient.addWebWindowListener(new WebWindowListener()
{
public void webWindowOpened(WebWindowEvent event)
{
System.out.println("a NEW window opened: " + event.getNewPage());
windows.add(event.getWebWindow());
}
@Override
public void webWindowClosed(WebWindowEvent event) {
System.out.println("a window is CLOSED: " + event.getOldPage());
// TODO Auto-generated method stub
}
@Override
public void webWindowContentChanged(WebWindowEvent event) {}
});
// Get the first page
HtmlPage page1 = webClient.getPage("**");
HtmlDivision div = (HtmlDivision) page1.getElementById("topContainer");
HtmlAnchor anchor = (HtmlAnchor) div.getElementById("loginBtn1");
HtmlPage logPage = (HtmlPage) anchor.click();
System.out.println("logPage is: "+logPage);
if ( windows.size() > 0)
{
System.out.println("YIOUHOUU");
HtmlPage popupPage = getPopupPage();
System.out.println(popupPage.getTitleText());
}
HtmlForm form = logPage.getFormByName("loginForm");
System.out.println("Form: "+ form);
HtmlTextInput username = form.getInputByName("username");
HtmlPasswordInput password = form.getInputByName("password");
HtmlCheckBoxInput rememberPassword = form.getInputByName("remember");
HtmlCheckBoxInput acceptTerms = logPage.getElementByName("acceptTerms");
HtmlAnchor button = form.getElementById("loginButton");
username.setValueAttribute("USER");
password.setValueAttribute("RANDOM_PASS");
rememberPassword.setChecked(true);
acceptTerms.setChecked(true);
System.out.println(form.toString());
HtmlPage page2 = button.click();
System.out.println(page2.asText());
webClient.closeAllWindows();
}
我得到登录页面,获取表单并提供字段。所有这一切都完成了,但是在第二页并单击登录时没有任何反应。
即使您提交字段并单击提交,也没有任何反应。我正在查看 html 页面的源代码,但不知道为什么,它是 ajax 还是后台的其他东西?
提前感谢您的帮助