selenium 如何等待页面加载完毕后在继续后面的操作
默认情况下 selenium 会等待整个界面加载完成(指对html和子资源的下载与解析,如JS文件,图片等,不包括ajax)。
但有时候页面数据渲染是由ajax完成的,如果采用默认情况,则无法得到我们想要的结果,这时需要等待页面所有数据包括ajax加载完成后再进行后续操作。
下面介绍几种等待页面完全加载完成的方法。
# time.sleep()
time.sleep() 使用 time.sleep() 方法可以让程序暂停指定的时间,等待页面加载完成。但这种方法不够灵活,因为不同的页面加载时间可能不同,设置时间过短会导致程序出错,设置时间过长会浪费时间。
```
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.xxx.com')
time.sleep(5) #等待 5 秒钟,建议不要设置过长
```
# 隐式等待
使用隐式等待可以设置一个固定的时间,让程序等待页面加载完成。如果页面在规定的时间内加载完成,则立即执行下一步操作;如果页面没有在规定的时间内加载完成,则抛出异常。这种方法比 time.sleep() 更加灵活,因为它可以自动调整等待时间。
```
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10) #等待 10 秒钟
driver.get('https://www.xxx.com')
```
# 显式等待
使用显式等待可以设置一个条件,让程序等待满足条件后再执行下一步操作。这种方法比隐式等待更加灵活,因为它可以根据需要设置不同的等待条件。
```
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get('https://www.xxx.com')
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'example'))) #等待元素出现
```
上面示例代码使用了 WebDriverWait 方法来设置等待条件,它会等待元素出现,最长等待时间为 10 秒钟。如果元素在规定的时间内出现了,则程序会继续执行下一步操作;否则会抛出异常。
我的笔记