等待操作
为了保证脚本的稳定性,有时候需要引入等待时间,等待页面加载元素后再进行操作,selenium提供三种等待时间设置方式。
练习selenium相关的html链接地址:
链接:https://pan.baidu.com/s/1K6eddRm7zdCIrRJjLR33Og
提取码:s4e8
EC模块断言
https://www.cnblogs.com/dream66/p/12665563.html
三种等待时间设置方式
1、固定等待
sleep():固定休眠时间设置,python的time包里提供了休眠方法sleep,导入包后就能使用;sleep()方法以秒为单位,如果超时设置小于1秒,可以使用小数
导入包:import time
time.sleep(2) 固定等待2秒
time.sleep(0.5) 固定等待0.5秒
代码如下:
import os
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
current_path = os.path.dirname(os.path.abspath(__file__)) # 当前路径
driver_path = os.path.join(current_path,'../webdriver/chromedriver.exe') # driver路径
pages_path = os.path.join(current_path,'../pages/wait.html') # 本地网页路径
driver = webdriver.Chrome(executable_path=driver_path) # Firefox,Ie等
driver.get('file://%s'%pages_path) # 本地网页打开file:// 打开部署好的站点http://
driver.find_element(By.XPATH,'//button').click()
time.sleep(5) # 固定等待 优点:简单易用 缺点:不适合网页中元素加载时间不定的情况
value = driver.find_element(By.XPATH,'//div').get_attribute('class')
print( value )
2、隐式等待
implicitlyWait():implicitlyWait()方法比sleep()方法智能,sleep()方法只能在一个固定的时间等待,而implicitlyWait()可以在一个时间范围内等待,称为隐式等待
隐式等待语法:driver.implicitly_wait(30) 全局设置隐式等待30秒
备注:设置等待时间30s,页面上的元素5s后出现,只等待5s。不会等待30秒
代码如下:
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
current_path = os.path.dirname(os.path.abspath(__file__)) # 当前路径
driver_path = os.path.join(current_path,'../webdriver/chromedriver.exe') # driver路径
pages_path = os.path.join(current_path,'../pages/wait.html') # 本地网页路径
driver = webdriver.Chrome(executable_path=driver_path) # Firefox,Ie等
# 隐式等待,全局设置(它之后的所有find_element都会生效)
# 运行机制:每隔0.5秒检查页面是否出现元素,如果出现,则识别成功进行后续操作
# 如果设置时间都没找到元素,则报错
driver.implicitly_wait(30)
driver.get('file://%s'%pages_path) # 本地网页打开file:// 打开部署好的站点http://
driver.find_element(By.XPATH,'//button').click()
value = driver.find_element(By.XPATH,'//div').get_attribute('class') # 获取class的属性值
print( value )
3、显示等待
WebDriverWait(): 显示等待,针对单个元素生效
前置条件:导入显示等待包 from selenium.webdriver.support.ui import WebDriverWait
语法格式如下:WebDriverWait(driver,timeout,poll_frequency=0.5,ignore_exceptions=None)
driver:WebDriver的驱动程序(IE,火狐,谷歌或远程)
timeout:最长超时时间,默认以秒为单位
poll_frequency:休眠时间的间隔(步长)时间,默认为0.5秒(即每500毫秒扫描一次页面)
ignore_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException异常
引入WebDriverWait类
element_obj = WebDriverWait(driver,30,0.5).until(lambda dr:dr.find_element(By.XPATH,'//div'))
代码如下:
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait # 显示等待类
current_path = os.path.dirname(os.path.abspath(__file__)) # 当前路径
driver_path = os.path.join(current_path,'../webdriver/chromedriver.exe') # driver路径
pages_path = os.path.join(current_path,'../pages/wait.html') # 本地网页路径
driver = webdriver.Chrome(executable_path=driver_path) # Firefox,Ie等
driver.get('file://%s'%pages_path) # 本地网页打开file:// 打开部署好的站点http://
driver.find_element(By.XPATH,'//button').click()
# 显示等待:1、单个元素设置生效 2、页面扫描时间可以自定义配置
element_obj = WebDriverWait(driver,30,0.5).until(lambda dr:dr.find_element(By.XPATH,'//div'))
print( element_obj.get_attribute('class') ) # 获取class属性值
版权归原作者 奔跑在路上you 所有, 如有侵权,请联系我们删除。