在Selenium Python中检查网站的.readyState的正确语法是什么?

在Selenium Python中检查网站的.readyState的正确语法是什么?,python,selenium,selenium-webdriver,webdriver,pageloadstrategy,Python,Selenium,Selenium Webdriver,Webdriver,Pageloadstrategy,我正在尝试使用.execute\u脚本检查网站的.readyState,但不断收到错误 我在chromedriver中使用的pageLoadStrategy为“none”,因此我试图测试readystate网站不再是“loading” 注意:这个问题是特定于Python的 WebDriverWait(driver, timeout=20).until( driver.execute_script('return document.readyState') == 'interactive'

我正在尝试使用.execute\u脚本检查网站的.readyState,但不断收到错误

我在chromedriver中使用的pageLoadStrategy为“none”,因此我试图测试readystate网站不再是“loading”

注意:这个问题是特定于Python的

WebDriverWait(driver, timeout=20).until(
    driver.execute_script('return document.readyState') == 'interactive'
)
值=方法(自身驱动程序) TypeError:“str”对象不可调用

我还尝试使用lambda,它不会抛出错误,但是打印readystate将返回冲突的结果

WebDriverWait(driver, timeout=20).until(
    lambda driver: driver.execute_script('return document.readyState') == 'interactive'
)
print(driver.execute_script('return document.readyState'))
装载


您可以将条件移动到JS中:

WebDriverWait(driver, timeout=20).until(
    lambda driver: driver.execute_script('return document.readyState === "interactive"')
)
print(driver.execute_script('return document.readyState'))
如果网站呈角度,则可以使用
pendingRequests.length==0
请参阅


希望这有帮助

使用
pageLoadStrategy
作为
none
然后对
文档使用WebDriverWait。readyState
作为
交互式
不是一个好方法。您可以对文档使用
pageLoadStrategy
或WebDriverWait。readyState
如下所示:

要将
pageLoadStrategy
配置为
None
,您可以使用以下任一解决方案:

  • Firefox

    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    caps = DesiredCapabilities().FIREFOX
    caps["pageLoadStrategy"] = "none"
    #caps["pageLoadStrategy"] = "eager"  #  interactive
    #caps["pageLoadStrategy"] = "normal"  #  complete
    driver = webdriver.Firefox(desired_capabilities=caps, executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
    driver.get("http://google.com")
    
    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    caps = DesiredCapabilities().CHROME
    caps["pageLoadStrategy"] = "none"
    #caps["pageLoadStrategy"] = "eager"  #  interactive
    #caps["pageLoadStrategy"] = "normal"  #  complete
    driver = webdriver.Chrome(desired_capabilities=caps, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("http://google.com")
    
  • 铬合金

    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    caps = DesiredCapabilities().FIREFOX
    caps["pageLoadStrategy"] = "none"
    #caps["pageLoadStrategy"] = "eager"  #  interactive
    #caps["pageLoadStrategy"] = "normal"  #  complete
    driver = webdriver.Firefox(desired_capabilities=caps, executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
    driver.get("http://google.com")
    
    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    caps = DesiredCapabilities().CHROME
    caps["pageLoadStrategy"] = "none"
    #caps["pageLoadStrategy"] = "eager"  #  interactive
    #caps["pageLoadStrategy"] = "normal"  #  complete
    driver = webdriver.Chrome(desired_capabilities=caps, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("http://google.com")
    
使用WebDriverWait等待
文档。readyState
作为
急切的

WebDriverWait(driver, 20).until(lambda driver: driver.execute_script("return document.readyState").equals("interactive"))
WebDriverWait(driver, 20).until(lambda driver: driver.execute_script("return document.readyState").equals("complete"))
使用WebDriverWait等待
文档。readyState
作为
正常

WebDriverWait(driver, 20).until(lambda driver: driver.execute_script("return document.readyState").equals("interactive"))
WebDriverWait(driver, 20).until(lambda driver: driver.execute_script("return document.readyState").equals("complete"))
您可以在中找到详细的讨论


奥特罗

这应该有助于您的解决方案似乎可以与“交互式”一起使用,但在尝试“lambda驱动程序:驱动程序。执行”脚本(“return document.readyState=='complete')”时,我在打印语句中得到了相同的“加载”尝试:
lambda驱动程序:驱动程序。执行”脚本(“return document.readyState=='complete”)
OP似乎已经将“pageLoadStrategy”配置为“None”。。。“我在chromedriver中使用了“无”的页面加载策略”@MosheSlavin似乎不清楚OP的要求,现在更新了答案。