如何在 Selenium 中等待 iframe 页面加载?

Ivo*_*rus 6 python selenium unit-testing

我有一个包含iframe标签的页面,并且想要捕捉 iframe 中的内容是否已完全加载。

我使用 time.sleep 和 check document.readyState,它在理想情况下运行良好;来自网络服务器的强大而快速的响应。但似乎不能保证所有情况,我想改进我的代码。

请告诉我一些建议或提示。谢谢。

我的环境

  • 操作系统:Windows 7 x64
  • 铬:68.0.3440.106(官方,64位)
  • 蟒蛇:3.6.6
  • 硒:3.14.0

我参考以下文件。

我在下面写了代码

def wait_for_document(self, driver):
    time.sleep(3)
    for i in range(20):
        if driver.execute_script("return document.readyState") == "complete" : return
        else : time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

And*_*son 8

尝试下面的代码等待iframe并切换到它以能够处理内部节点:

from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.common.by import By

driver = webdriver.Chrome() 
driver.get(URL) 
wait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it("iframe_name_or_id"))
Run Code Online (Sandbox Code Playgroud)

而不是"iframe_name_or_id"你可以iframe作为 WebElement传递:

wait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_xpath('//iframe')))
Run Code Online (Sandbox Code Playgroud)

等待元素在框架内的存在:

wait(driver, 10).until(EC.presence_of_element_located((By.ID, "Element ID")))
Run Code Online (Sandbox Code Playgroud)

你也可以使用By.NAMEBy.CLASS_NAMEBy.XPATH等...

更多关于显式等待