selenium 常见元素操作:三大等待---强制等待、隐性等待、显性等待

一、强制等待

sleep() 不管元素有没有出现,一定要等。

from selenium import webdriver

import time # 强制等待需要导入time,使用其中的sleep方法

二、隐形等待,适用条件:命令执行,元素查找(alert弹窗或者切换可能不生效)

 implicitly_wait() 会话开始之后使用隐形等待,之后所有的找元素都会调用隐形等待,等待元素可见,等待命令执行

设置最长等待时间,在这个时间内加载完成,则可执行下一步,

震哥哥driver的会话周期内,设置一次即可,全局可用(会话周期:打开浏览器到关闭浏览器。)

等待时间超时还未出现元素,就会抛出异常timeout。

from selenium import webdriver
#启动谷歌浏览器,开启与浏览器之间的绘话,会话周期:打开浏览器到关闭浏览器。
driver = webdriver.Chrome(service_log_path='E:\柠檬班二\chromedriver_service.log')
#全局等待,隐性等待,如果不加等待,页面弹窗上可能找不到用户名密码这个元素
driver.implicitly_wait(30)
#访问一个网页
driver.get("https://www.baidu.com")
#找到登录点击
driver.find_element_by_xpath('//*[@id="u1"]/a[@class="lb"]').click()
#找到用户名密码登录方式
driver.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn').click()

三、显性等待,明确提出要等什么,等某个条件满足后,去执行下一个

1、明确等到某个条件满足之后,再去执行下一步操作。

2、程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutEeception。

3、WebDriverWait 显性等待类

4、WebDriverWait(driver,等待时长,轮播周期).until()/until_not()

5、expected_condition模块:提供了一系列的期望发生的条件

6、presence_of_element_located:元素存在

7、visibility_of_element_located:元素可见

8、element_to_be_clickable:元素可点击

这个类有很多判断方法的

使用之前,引入相关的类:

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_location = "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 import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

#启动谷歌浏览器,开启与浏览器之间的绘话,会话周期:打开浏览器到关闭浏览器。
driver = webdriver.Chrome(service_log_path='E:\柠檬班二\chromedriver_service.log')
#访问一个网页
driver.get("https://www.baidu.com")
#找到登录点击
driver.find_element_by_xpath('//*[@id="u1"]/a[@class="lb"]').click()

#设置登录弹窗的显性等待,使用定位类型和值一起定位
id = 'TANGRAM__PSP_10__footerULoginBtn'
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,id)))  #(By.ID,id)这里传的是个元组

#找到用户名密码登录方式
driver.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn').click()

猜你喜欢

转载自www.cnblogs.com/wuzm/p/12421811.html