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...打印输出到SocketTimeoutException抛出的时间,在所有情况下,即使我将client超时设置为两分钟,它也总是正好是一分钟。现在,我知道这是最初加载页面(client.getPage(...)调用)的超时时间,那么我有什么办法可以设置按钮单击的超时时间并让它等待超过一分钟,也许是十分钟?

4

1 回答 1

1

在撰写本文时,此问题尚无已知解决方案。我最终做的是在页面上发出多个自动请求以分批接收数据。基本上,我先查询 2002,然后查询 2003、2004,依此类推。

于 2012-08-20T16:34:44.983 回答