selenium 常见元素操作:三大等待
Posted shouhu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium 常见元素操作:三大等待相关的知识,希望对你有一定的参考价值。
selenium 常见元素操作
- 三大等待
- 三大切换(iframe,window,alert)
- 下拉列表
- 鼠标和键盘
- js+ dom应用()
- 上传操作
强制等待:time.sleep() (译:私立破)
必须等待固定时间后才可以往下运行
from selenium import webdriver import time # 强制等待需要导入time,使用其中的sleep方法 # 强制等待 sleep(译:私立破) # 打开谷歌浏览器,建立会话。启动Chromedriver.exe 打开Chrome driver = webdriver.Chrome() # 访问百度首页 driver.get("http://www.baidu.com") # 点击登录按钮 driver.find_element_by_xpath(‘//div[@id="u1"]//a[@name="tj_login"]‘).click() # # 强制等待5秒,在进行下一步操作 time.sleep(10) # 点击 用户名登录 按钮 driver.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click() # 强制等待5秒后关闭浏览器 time.sleep(10) driver.quit()
智能等待分为:隐形等待、显性等待
隐形等待:implicitly_wait(20) (译:隐婆思类.威特)
全局设置一次(与显性等待不同)
隐形等待元素不一定是可见的(与显性等待不同)
智能等待的隐形等待:会话开始之后使用隐形等待,之后所有的找元素都会调用隐形等待,等待元素可见,等待命令执行
from selenium import webdriver # 打开谷歌浏览器,建立会话。启动Chromedriver.exe 打开Chrome driver = webdriver.Chrome() # 智能等待的隐形等待:会话开始之后使用隐形等待,之后所有的找元素都会调用隐形等待,等待元素可见,等待命令执行 # implicitly_wait(译:隐婆思类.威特) driver.implicitly_wait(20) # 访问百度首页 driver.get("http://www.baidu.com") # 点击登录按钮 driver.find_element_by_xpath(‘//div[@id="u1"]//a[@name="tj_login"]‘).click() # 点击 用户名登录 按钮 driver.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click() # 关闭浏览器 driver.quit()
显性等待:他有非常多的条件
与隐形等待的不同;可以处理很多中情况如:
- 等待元素可见
- 等待元素可用
- 等待新窗口出现
- 等待 url地址=xxx的时候
- 等待 的上限是多少秒,每隔0.5秒去查看条件是否成立
- 明确等到某个条件满足之后,再去执行下一步操作。
- 程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到
- 超过设置的最长时间,然后抛出TimeoutException. --- .
- WebDriverWait类:显性等待类。
- WebDriverWait(driver,等待时长,轮循周期).until()/until_ not()
- expected_ conditions模块: 提供了-系列期望发生的条件。
- presence_ _of_ element_ located:元素 存在
- vibility _of_ element_ located: 元素可见
- element _to_ be_ clickable: 元素可点击
- ps:这个类有很多判断方法。具体自行了解。
什么时候用?
- 当你的操作,引起了页面的变化,而你接下来要操作变化 的元素的时候,就一定要加等待。
使用之前,引入相关的库
- from selenium.webdriver.support.wait import WebDriverWait
- from selenium.webdriver.support import expected_conditions as EC
- from selenium.webdriver.common.by import By
使用方法:
1、先确定元素的定位表达式
web_ locator = ‘XXXX‘
2、调用webdriverWait类设置等待总时长、轮询周期。并调用期until、until_ not方法。
WebDriverWait(webdriver对象名,等待总时长,轮询周期),until(判断条件)
3、使用expected_ conditions对 应的方法来生成判断条件。
EC.类名((定位方式、定位表达式))
例: EC.presence_ of_ element_ located((By.CSS_ SELECTOR,web locator)))
例:等待百度登陆的弹出框出现,再去操作弹出框。
# 使用之前,引入相关的库 from selenium.webdriver.support.wait import WebDriverWait # 等待条件 from selenium.webdriver.support import expected_conditions as EC # 等待元素可见的条件 from selenium.webdriver.common.by import By # 定位类型八种定位方式 from selenium import webdriver # 打开谷歌浏览器,建立会话。启动Chromedriver.exe 打开Chrome driver = webdriver.Chrome() # 访问百度首页 driver.get("http://www.baidu.com") # 点击登录按钮 driver.find_element_by_xpath(‘//div[@id="u1"]//a[@name="tj_login"]‘).click() # 等待元素 id=TANGRAM__PSP_10__footerULoginBtn 可见。等待上限是10秒。直到 条件可见 loc = (By.ID, "TANGRAM__PSP_10__footerULoginBtn") # EC.visibility_of_element_located(loc) # 等待元素可见的条件 # until 直到什么什么 WebDriverWait(driver, 10, 0.5).until(EC.visibility_of_element_located(loc)) # 点击 用户名登录 按钮 driver.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click() # 关闭浏览器 driver.quit()
*******请大家尊重原创,如要转载,请注明出处:转载自:https://www.cnblogs.com/shouhu/,谢谢!!*******
以上是关于selenium 常见元素操作:三大等待的主要内容,如果未能解决你的问题,请参考以下文章