Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HtmlUnit-按钮单击问题_Java_Spring_Button_Web Scraping_Htmlunit - Fatal编程技术网

Java HtmlUnit-按钮单击问题

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().

我正在用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方法中运行此命令时,两个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应用程序相比,它在服务器上的性能会有所不同?