[英]Htmlunit Skipping Page With Button Click
我有一个用Htmlunit编写的程序,可以从网站上的多个页面返回信息。 问题是,尽管前两页返回正常,但随后每隔一页返回一次(返回第1、2、4、6等页)。 我相信我引用的所有变量都是正确的,因此我不确定是服务器与程序通信还是其他问题。 我的代码是:
public static void scrapeWebsite() throws IOException {
final WebClient webClient = new WebClient();
final HtmlPage page = webClient.getPage(s);
originalHtml = page.getWebResponse().getContentAsString();
obtainInformation();
originalHtml = "";
//////code below returns page 2 as expected////
final HtmlForm form = page.getForms().get(0);
final HtmlSubmitInput button = form.getInputByValue(">");
final HtmlPage page2 = button.click();
try {
synchronized (page2) {
page2.wait(5000);
}
}
catch(InterruptedException e)
{
System.out.println("error");
}
originalHtml = originalHtml + page2.refresh().getWebResponse().getContentAsString();
obtainInformation();
originalHtml = "";
/////// code below returns page 4, instead of page 3/////
final HtmlForm form2 = page2.getForms().get(0);
final HtmlSubmitInput button2 = form2.getInputByValue(">");
final HtmlPage page3 = button2.click();
try {
synchronized (page3) {
page3.wait(5000);
}
}
catch(InterruptedException e)
{
System.out.println("error");
}
originalHtml = originalHtml + page3.refresh().getWebResponse().getContentAsString();
obtainInformation();
}
我能想到的唯一问题是,当运行page.refresh()时,它实际上是双击按钮,但是如果没有page.refresh(),则第1页上的信息仅返回3次。 此外,s表示网站的字符串。
在不看您要获取的页面的情况下,有些事情实际上在代码中听起来很奇怪。
originalHtml
变量进行操作。 看来这只是您在该方法中编写的静态变量。 您似乎没有在那里读它,因此您可能是在obtainInformation()
方法中阅读它,在这种情况下,应仅在该方法中使用它。 更不用说您要为其分配值""
,然后再分配页面值,从而无需分配""
。 page.getWebResponse().getContentAsString()
替换为page.asXml()
。 当然,如果您确实需要将页面的原始HTML保存到文件中,请保持原样。 refresh()
。 您得到page2
并等待5秒钟(盲目地假定该页面作为新内容已准备好在其上进行操作)。 然后,无需刷新page2
,而是刷新它并获取新页面的内容。 这可能是导致您正确获得第一页,其余页以2隔开的原因。 这些只是一些一般性的评论,应该会对您有所帮助。 他们不一定能解决问题,但应该可以大大改善您的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.