已经阅读了这个论坛一段时间但刚刚注册,这是我的第一篇文章,所以在这里做的出色工作值得称赞。
我正在用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();
}
我获取登录页面,获取表单并提供字段。所有这一切都已完成,但是当在第二页上并单击登录时,没有任何事情发生。
即使您提交字段并单击SUbmit也没有任何反应。我正在查看html页面的来源,但无法弄清楚为什么,是背景中的ajax还是其他?
提前感谢您提供任何帮助
答案 0 :(得分:1)
对于弹出式登录框,您可以使用网址传递用户名和密码。
如果您使用以下这一行进入该登录页面:
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);
答案 1 :(得分:0)
**更新:使用Selenium和他们的WebDriver API解决了这个问题,这使得这很简单。似乎Htmlunit不适合这类任务,并听取我的意见并避免出于类似目的。