Java HtmlUnit-按钮单击问题
我正在用java编写一个服务器,对于服务器的一部分,我需要一个webscraper。为了抓取网站,我需要登录,当作为一个主要方法运行时,网络抓取器工作正常,但是当在服务器上运行时,单击按钮不会重定向到新页面。这是代码Java HtmlUnit-按钮单击问题,java,spring,button,web-scraping,htmlunit,Java,Spring,Button,Web Scraping,Htmlunit,我正在用java编写一个服务器,对于服务器的一部分,我需要一个webscraper。为了抓取网站,我需要登录,当作为一个主要方法运行时,网络抓取器工作正常,但是当在服务器上运行时,单击按钮不会重定向到新页面。这是代码 String loginUrl="MY_URL"; WebClient web = new WebClient(); WebClientOptions options=web.getOptions(); web.getCookieManager().
String loginUrl="MY_URL";
WebClient web = new WebClient();
WebClientOptions options=web.getOptions();
web.getCookieManager().setCookiesEnabled(true);
options.setJavaScriptEnabled(true);
options.setPrintContentOnFailingStatusCode(false);
options.setCssEnabled(false);
options.setThrowExceptionOnFailingStatusCode(false);
options.setThrowExceptionOnScriptError(false);
options.setRedirectEnabled(true);
try {
final HtmlPage firstPage = (HtmlPage)web.getPage(loginUrl);
final HtmlForm form = firstPage.getForms().get(0);
final HtmlTextInput userNameField = form.getInputByName("USER");
userNameField.setValueAttribute("MY_USERNAME");
final HtmlPasswordInput passWordField = form.getInputByName("PASSWORD");
passWordField.setValueAttribute("MY_PASSWORD");
HtmlButton button =(HtmlButton)firstPage.getElementById("safeLoginbtn");
System.out.println(firstPage.getUrl().toString());
button.click();
System.out.println(web.getEnclosedPage().getUrl().toString());
}
catch(Exception e)
{
e.printStackTrace();
}
在main方法中运行此命令时,两个print语句分别显示两个不同的页面:登录页面和登录后的页面。但在服务器上运行时,这两个print语句具有几乎相同的url,并且都是登录页面的url。为什么会发生这种情况?为什么代码在主方法中的行为与在服务器上运行的不同
服务器由Spring框架运行,如果这与此有关的话
编辑:
示例如下:
WebClient webClient = new WebClient();
HtmlPage page1 = webClient.getPage("http://www.facebook.com");
HtmlForm form = page1.getForms().get(0);
HtmlSubmitInput button = (HtmlSubmitInput) form.getInputsByValue("Log In").get(0);
HtmlTextInput textField = form.getInputByName("email");
textField.setValueAttribute("email@email.com");
HtmlPasswordInput textField2 = form.getInputByName("pass");
textField2.setValueAttribute("MY_PASS");
HtmlPage page2 = button.click();
System.out.println(page2.asText());
这在java应用程序的主方法中起作用,但当通过Spring的定时注释在服务器上运行时,它不会让我登录。可能会有重定向。或许您可以执行以下操作:
HtmlPage pageAfterLogin = button.fireEvent("onclick").getNewPage();
System.out.println(pageAfterLogin.getUrl().toString());
路上可能有个重定向。或许您可以执行以下操作:
HtmlPage pageAfterLogin = button.fireEvent("onclick").getNewPage();
System.out.println(pageAfterLogin.getUrl().toString());
HtmlPage page2=按钮。单击()
然后选中page2.asXml()
。你也可以用URL发布你的完整案例,请阅读@AhmedAshour我编辑了这篇文章,给出了一个有趣的例子,你能发布最小的Spring项目吗,这样我们可以进一步调试。HtmlPage page2=button.click()
然后选中page2.asXml()
。你也可以用URL发布你的完整案例,请阅读@AhmedAshour我编辑了这篇文章,给出了一个有趣的例子,你可以发布最小的Spring项目,这样我们就可以进一步调试了。这种方法仍然不走运不,没有错误,只是没有按照预期执行。为什么与java应用程序相比,它在服务器上的性能会有所不同?使用这种方法仍然不走运不,没有任何错误,只是没有按照预期执行。为什么与java应用程序相比,它在服务器上的性能会有所不同?