Java HtmlUnit登录弹出窗口问题
这是我的第一篇帖子,我已经阅读了这个论坛一段时间了,但刚刚注册,所以这里的出色工作让我感到非常荣幸 我正在用Java编写一个程序,目的是使用HtmlUnit连接到我订阅的杂志之一,登录并搜索我感兴趣的文章。一旦我开始工作,它会给我发一封电子邮件,但这与我的问题无关 我无法使登录名正常工作:Java HtmlUnit登录弹出窗口问题,java,htmlunit,Java,Htmlunit,这是我的第一篇帖子,我已经阅读了这个论坛一段时间了,但刚刚注册,所以这里的出色工作让我感到非常荣幸 我正在用Java编写一个程序,目的是使用HtmlUnit连接到我订阅的杂志之一,登录并搜索我感兴趣的文章。一旦我开始工作,它会给我发一封电子邮件,但这与我的问题无关 我无法使登录名正常工作: 我读了这一页 找到登录按钮并单击它 在新页面中捕获结果,提取表单并提供用户名/密码,最后 点击登录按钮 如果你点击登录,就会弹出一个窗口。但我似乎无法捕捉弹出窗口 这是我的代码: public void
- 我读了这一页
- 找到登录按钮并单击它
- 在新页面中捕获结果,提取表单并提供用户名/密码,最后
- 点击登录按钮
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();
}
我获取登录页面,获取表单并提供字段。所有这些都完成了,但是当在第二个页面上单击login时,什么也没有发生
即使您提交字段并单击“提交”,也不会发生任何情况。我正在查看html页面的源代码,但不明白为什么,它是ajax还是其他背景
提前感谢您的帮助**更新:放弃此功能,并使用Selenium及其WebDriver API解决了此问题,使其变得简单。Htmlunit似乎不适合这种类型的任务,请听从我的建议,出于类似目的避免使用它。**更新:放弃了这一点,并使用Selenium和他们的WebDriver API解决了这一问题,这使它变得简单。Htmlunit似乎不适合此类任务,请听从我的建议,出于类似目的避免使用它。对于弹出式登录框,您可以使用url传递用户名和密码。
如果您使用以下行进入该登录页面:
String url = "http://example.com";
HtmlPage page = webClient.getPage(url);
然后将此链接更改为以下链接,它应该可以工作:String username = "YOUR USERNAME";
String password = "YOUR PASSWORD";
String url = "http://" + username + ":" + password + "@example.com";
HtmlPage page = webClient.getPage(url);
对于弹出式登录框,您可以使用url传递用户名和密码。
如果您使用以下行进入该登录页面:
String url = "http://example.com";
HtmlPage page = webClient.getPage(url);
然后将此链接更改为以下链接,它应该可以工作:String username = "YOUR USERNAME";
String password = "YOUR PASSWORD";
String url = "http://" + username + ":" + password + "@example.com";
HtmlPage page = webClient.getPage(url);