HtmlUnit需要线程睡眠'在'单击按钮

HtmlUnit need thread sleep 'before' clicking button?

本文关键字:单击 按钮 线程 HtmlUnit      更新时间:2024-03-16

我正试图使用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"就永远不会更新。为什么会这样?还有没有更强大的方法(比如标题栏循环,只从标题栏中获取文本,例如"巴克莱超级联赛"等)。

也许行:

ukGroupDropdown.setSelectedAttribute(option, true);

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

updateButton.click();

队伍需要等待前者结束。

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