元素等待操作
为了保证脚本的稳定性,有时候需要引入等待时间,等待页面加载元素后再进行操作,selenium提供三种等待时间设置方式。
sleep
sleep():固定休眠时间设置,python的time包里提供了休眠方法sleep,导入包后就能使用;
sleep()方法以秒为单位,如果超时设置小于1秒,可以使用小数importtimetime.sleep(0.5)
implicitlyWait
implicitlyWait()方法比sleep()方法智能,sleep()方法只能在一个固定的时间等待,而implicitlyWait()可以在一个时间范围内等待,称为隐式等待
driver.implicitly_wait(100)
element=driver.find_element_by_css_selector(“div.red_box”)
备注:设置等待时间100s,页面上的元素5s后出现,只等待5s。不会等待100秒
WebDriverWait
显示等待,语法格式如下:
WebDriverWait(driver,timeout,poll_frequency=0.5,ignore_exceptions=None)
driver:WebDriver的驱动程序(IE,火狐,谷歌或远程)
timeout:最长超时时间,默认以秒为单位
poll_frequency:休眠时间的间隔(步长)时间,默认为0.5秒(即每500毫秒扫描一次页面)
ignore_exceptions:超时后的异常信息,默认情况下抛 NoSuchElementException异常
扩展知识:高亮元素
def highLightElement(driver, element):
# 封装好的高亮显示页面元素的方法
# 使用JavaScript代码将传入的页面元素对象的背景颜色和边框颜色分别
# 设置为绿色和红色
driver.execute_script("arguments[0].setAttribute('style',arguments[1]);",
element, "background:green ;border:2px solid red;")
示例代码
# -*- coding: utf-8 -*-
# @Time : 2021/12/22 17:41
# @Author : Limusen
# @File : demo_ui_wait
import os
import time
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
STYLE = "background: blue; border: 2px solid red;" # 高亮的样式
def highLightElement(driver, element):
# 封装好的高亮显示页面元素的方法
# 使用JavaScript代码将传入的页面元素对象的背景颜色和边框颜色分别
# 设置为绿色和红色
driver.execute_script("arguments[0].setAttribute('style',arguments[1]);",
element, "background:green ;border:2px solid red;")
# 1.扩展知识:元素高亮
driver = webdriver.Chrome()
driver.get(os.path.join(os.path.dirname(os.path.abspath(__file__)),'..','file','Wait.html'))# 在代码文件中
# https://gitee.com/todayisgoodday/PythonSelenium
# 2.不加任何等待,直接报错
# driver.find_element(By.ID,'b').click()
# el = driver.find_element(By.CSS_SELECTOR, 'div.red_box')
# highLightElement(driver, el)
# 3.sleep():固定休眠时间设置 固定等待7s
# driver.find_element(By.ID,'b').click()
# time.sleep(7)
# el = driver.find_element(By.CSS_SELECTOR, 'div.red_box')
# highLightElement(driver, el)
# 4.implicitlyWait():隐式等待, 加隐式等待10秒
# driver.implicitly_wait(10) # 只需要设置一次,整个代码都生效
# driver.find_element(By.ID, 'b').click()
# el = driver.find_element(By.CSS_SELECTOR, 'div.red_box')
# highLightElement(driver, el)
# 5.WebDriverWait():显示等待,加显示10s
driver.find_element(By.ID, 'b').click()
element = WebDriverWait(driver, 5).until(lambda x: x.find_element_by_css_selector('div.red_box'))
highLightElement(driver, element)
time.sleep(2)
driver.quit()
总结
本章节主要讲述了等待的具体用法,下一章节我们将学习层级定位/父子级元素定位/切换iframe框架等操作
代码地址
https://gitee.com/todayisgoodday/PythonSelenium
CSDN地址
https://blog.csdn.net/weixin_42382016/category_11566096.html