HtmlUnit を使用して、プログラムで Java の Web フォームに入力して送信しています。これが私のコードです:
WebClient client = new WebClient();
client.setThrowExceptionOnScriptError(false); // avoid JavaScript errors
client.setTimeout(120000); // 2 minutes
HtmlPage page;
// load the website
page = client.getPage("http://www.some-website.com");
// represent the page elements in Java objects
// input fields and checkboxes first, then...
HtmlSubmitInput submit = form.getInputByName("submitbutton");
// set "value" attributes of input fields and checkboxes...
// submit the page
System.out.println("Submitting... ");
page = submit.click();
System.out.println("Done!");
// return the resulting HTML for scraping
return page.asXml();
さて、submit.click()
一部では、次の例外が引き続き発生します。
java.net.SocketTimeoutException: Timeout while fetching: http://www.some-website.com
これは、2002 年から今日までのデータを取得しようとしているためです。ブラウザからロードすると、プロセス全体で通常約 6 分ほどかかり、約 24,200 行のデータが返されます。
Submitting...
が出力されてから がスローされるまでの時間をカウントしました。すべての場合で、タイムアウトを 2 分SocketTimeoutException
に設定しても、常に正確に 1 分です。client
これで、ページを最初にロードするときのタイムアウト (client.getPage(...)
呼び出し) がわかったので、ボタン クリックのタイムアウトを設定して、1 分以上 (おそらく 10 分) 待機させる方法はありますか?