我正在使用java编写服务器,而对于部分服务器,我需要一个webscraper。为了抓住网站,我需要登录并且网络刮刀在作为主要方法运行时工作正常,但是当在服务器上运行时,按钮单击不会重定向到新页面。这是代码。
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方法中运行时,两个打印语句分别显示两个不同的页面,即登录页面和登录后面的页面。但是当在服务器上运行时,两个打印语句具有几乎相同的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的预定注释在服务器上运行时,它不会让我登录。
答案 0 :(得分:0)
可能会有重定向。也许你可以做到以下几点:
HtmlPage pageAfterLogin = button.fireEvent("onclick").getNewPage();
System.out.println(pageAfterLogin.getUrl().toString());