selenium教程四:元素等待、窗口切换、验证码处理

元素等待

代码执⾏过程中,第⼀次未找到元素,先不抛出异常。激活等待时间,在等待过程中如果找到元素就执⾏。

1.隐式等待

# 针对全部元素⽣效。在项⽬中,如果未封装⾃动化框架时,推荐使⽤。
driver.implicitly_wait(秒)

2.显示等待

方法一:使用匿名函数lambda

# 针对单个元素⽣效,可以修改查找频率和超时时间。
from selenium.webdriver.support.wait import WebDriverWait
# 2、显示等待 -> 返回查找到的元素
el = WebDriverWait(driver,10,0.5).until(lambda x:x.find_element(By.CSS_SELECTOR,"#userAA"))
el.send_keys("admin")

方法二:导入expected_conditions包

from selenium import webdriver
from selenium.webdriver.common.by import By
# 1.导入expected_conditions包
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

driver=webdriver.Chrome()
content=(By.ID,'baidu')
# 2.显示等待,返回查找到的元素
WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located(content))

3.强制等待

sleep(3)

frame切换

焦点默认在启动⻚⾯,如果不处理iframe,⽆法操作iframe嵌⼊的⻚⾯元素。

1、切换到iframe driver.switch_to.frame(iframe元素) 
2、操作元素
3、回到默认⻚⾯ driver.switch_to.default_content()

多窗口切换

通过a链接,如果打开⽅式新窗⼝打开,那么就会出现多窗⼝。

selenium默认启动时,所有的焦点在启动窗⼝,那么意味着⽆法操作其他窗⼝的标签。

print("操作之前所有窗⼝的句柄:", driver.window_handles)        #查看句柄
driver.find_element(By.LINK_TEXT, "注册A⽹⻚").click()
handles = driver.window_handles
print("操作之后所有窗⼝的句柄:", handles)
# 重点:切换窗⼝
driver.switch_to.window(handles[1])
# 填写注册A⽹⻚ ⽤户名
driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("admin")

⾯试题:如果定位不到元素怎么办?

图片[1] - selenium教程四:元素等待、窗口切换、验证码处理 - 三酷猫

窗口截图

当前ui⻚⾯,截图保存。出错后,⽅便查看直观错误原因。

driver.get_screenshot_as_file("xxx.png")

验证码处理

1、去除验证码

2、使⽤万能验证码

3、使⽤图⽚识别技术(识别效率低)

4、使⽤cookie

1、获取cookie # 获取所有driver.get_cookies()
2、添加cookie # driver.add_cookie(data)
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享