提问者:小点点

使用selenium等待直到在python中完成一些查询[重复]


我试图用selenium和python3. x在UI上写进程。在某些情况下,我想在进入下一步之前等待特定的查询完成。因为在查询完成期间,我没有可以使用的元素,并且返回文档.readyState,因为完成对我不起作用。是否可以使用selenium等。直到做到这一点?喜欢

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
WebDriverWait(driver, 120).until(lambda x: "query return 0")
WebDriverWait(driver, 120).until(EC."something to wait for")

共2个答案

匿名用户

更短的解决方案:

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

匿名用户

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

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")

这可以这样使用:

# First perform an action that fires an ajax request
wait = WebDriverWait(driver, 10)
wait.until(ajax_requests_to_finish())

免责声明:我是一个java程序员,我真的不知道任何python。我在这个页面上画了一个如何在Python中创建自定义等待条件的例子,因为我只知道如何在Java中这样做。抱歉,如果我的代码不正确,这个来源页面描述了一个更通用的工作示例。https://selenium-python.readthedocs.io/waits.html

编辑:正如esers在另一个答案中指出的,这个潜在的解决方案是可能的