1

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 分) 待機させる方法はありますか?

4

1 に答える 1

1

この記事の執筆時点では、この問題に対する既知の解決策はありません。私がやったことは、ページで複数の自動化されたリクエストを作成して、データを部分的に受け取ることです。基本的に、最初に 2002 年をクエリし、次に 2003 年、2004 年などをクエリしました。

于 2012-08-20T16:34:44.983 に答える