Java HtmlUnit登录弹出窗口问题

Java HtmlUnit登录弹出窗口问题,java,htmlunit,Java,Htmlunit,这是我的第一篇帖子,我已经阅读了这个论坛一段时间了,但刚刚注册,所以这里的出色工作让我感到非常荣幸 我正在用Java编写一个程序,目的是使用HtmlUnit连接到我订阅的杂志之一,登录并搜索我感兴趣的文章。一旦我开始工作,它会给我发一封电子邮件,但这与我的问题无关 我无法使登录名正常工作: 我读了这一页 找到登录按钮并单击它 在新页面中捕获结果,提取表单并提供用户名/密码,最后 点击登录按钮 如果你点击登录,就会弹出一个窗口。但我似乎无法捕捉弹出窗口 这是我的代码: public void

这是我的第一篇帖子,我已经阅读了这个论坛一段时间了,但刚刚注册,所以这里的出色工作让我感到非常荣幸

我正在用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();
}
我获取登录页面,获取表单并提供字段。所有这些都完成了,但是当在第二个页面上单击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);