我正在使用 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(...)
调用)的超时时间,那么我有什么办法可以设置按钮单击的超时时间并让它等待超过一分钟,也许是十分钟?