我正在尝试使用HtmlUnit从BBC体育网站上搜集分数http://www.bbc.co.uk/sport/football/live-scores
页面加载英超联赛,然后有一个下拉菜单选择其他联赛,然后点击“更新”按钮更新页面(可能是通过ajax)。
此代码可以很好地获取更新的分数:
long startTime = System.currentTimeMillis();
String titleBar = getTitleBar(page);
HtmlOption option = ukGroupDropdown.getOptionByValue(competition);
ukGroupDropdown.setSelectedAttribute(option, true);
HtmlButton updateButton = (HtmlButton)page.getElementById("filter-nav-submit");
Thread.sleep(1000); // WHY???????
HtmlPage newPage = updateButton.click();
while(titleBar.equals(getTitleBar(newPage))) {
Thread.sleep(100);
}
System.out.println("Took " + (System.currentTimeMillis() - startTime));
return getMatches(newPage);
但如果我在点击更新按钮之前取出Thread.sleep','newPage'永远不会更新。为什么会这样?还有一种更健壮的方式(比如titleBar循环只能从标题栏中获取文本,例如“巴克莱英超联赛”等)。
答案 0 :(得分:0)
也许这一行:
ukGroupDropdown.setSelectedAttribute(option, true);
正在执行异步(AJAX)调用和
updateButton.click();
行需要等待前者完成。
例如,可以禁用该按钮,但在选择项目时可能会启用该按钮。