Web サイトの複数のページから情報を返すために Htmlunit で作成されたプログラムがあります。問題は、最初の 2 ページは正常に返されますが、1 ページおきに返されることです (ページ 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() がないと、最初のページの情報が 3 回返されるだけです。また、s は Web サイトの文字列を指します。