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

Java HtmlUnit点击按钮之前需要线程睡眠吗?,java,javascript,ajax,htmlunit,Java,Javascript,Ajax,Htmlunit,我正在尝试使用HtmlUnit从BBC体育网站上获取分数 页面加载英超联赛,然后有一个下拉列表选择其他联赛,然后单击“更新”按钮,大概通过ajax更新页面 此代码可以很好地获得更新的分数: long startTime = System.currentTimeMillis(); String titleBar = getTitleBar(page); HtmlOption option = ukGroupDropdown.getOptionByValue(competit

我正在尝试使用HtmlUnit从BBC体育网站上获取分数

页面加载英超联赛,然后有一个下拉列表选择其他联赛,然后单击“更新”按钮,大概通过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();
排队需要等待前者完成


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

我认为您是对的,单击下拉选项似乎是一个异步调用,因为如果另一个下拉列表中有一个值,则其中一个会被重置。但是,肉眼看不到“update”按钮是禁用的,如果我在线程睡眠之前选中updateButton.isDisabled,则不会禁用它。如果单击下拉列表后页面没有可见的更改,我如何检查脚本是否已完成?好吧,我说禁用只是为了给出一个示例,但它可能只是一个处理onchange事件的JS的操作,最有可能的情况是。解决这个问题的唯一方法是查看元素选择在DOM中执行的更改,并尝试查询DOM以进行更新。例如,它可以是,向按钮添加一个新的CSS类,或者可能设置一个HTML5属性OK,我会尝试一下——如果我在之前和之后提取html源代码,更改会显示在那里吗?谢谢你的帮助,接受你的回答!只要您使用asXml方法,它就应该存在。如果使用getContentAsString,则不会。