HtmlUnit在点击按钮之前需要线程睡眠吗?

时间:2013-12-04 17:43:23

标签: java javascript ajax htmlunit

我正在尝试使用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循环只能从标题栏中获取文本,例如“巴克莱英超联赛”等)。

1 个答案:

答案 0 :(得分:0)

也许这一行:

ukGroupDropdown.setSelectedAttribute(option, true);

正在执行异步(AJAX)调用和

updateButton.click();

行需要等待前者完成。

例如,可以禁用该按钮,但在选择项目时可能会启用该按钮。