使用Selenium等到等待在python中完成一些查询

时间:2018-08-21 17:35:33

标签: python-3.x selenium selenium-webdriver

我尝试使用selenium和python3.x在UI上编写过程。在某些情况下,我想等待特定的查询完成,然后再进行下一步。因为在查询完成期间,没有任何元素可供我使用,并且ax1.set_yticks(np.arange(len(TITLES)), minor=False)因为return document.readyState对我不起作用。是否可以使用硒wait.until做到这一点?喜欢

complete

2 个答案:

答案 0 :(得分:1)

如果查询是使用Ajax运行的,并且您使用的是JQuery,则可以尝试使用javascript执行程序,以便在初始化请求后等待所有正在运行的ajax请求完成:

public class World implements RequestHandler<SQSEvent, Void>{
    public Void handleRequest(SQSEvent event, Context context)
    {
        for(SQSMessage msg : event.getRecords()){
            System.out.println(new String(msg.getBody()));
        }
        return null;
    }
}

您可以将其包装到自定义的ExpectedCondition中,以与以下代码重复使用:

driver.execute_script("return jQuery.active == 0")

可以这样使用:

class ajax_requests_to_finish(object):
    def __call__(self, driver):
        return driver.execute_script("return jQuery.active == 0")

免责声明:我是一名Java程序员,我真的不认识任何python。我以此页面为例,介绍了如何在Python中创建自定义等待条件,因为我只知道如何在Java中执行此操作。抱歉,如果我的代码不正确,此来源页面将描述一个更通用的工作示例。 https://selenium-python.readthedocs.io/waits.html

编辑:正如Sers在另一个答案中指出的那样,这种潜在的解决方案可能是单线的

答案 1 :(得分:0)

更短的解决方案:

WebDriverWait(driver, 10).until(lambda d: d.execute_script("return jQuery.active == 0"))