selenium等待
有三种等待方法
1.time.sleep(5)
简单粗暴,强制等待5秒
2.隐式等待
driver.implicityly_wait(10)
在所有执行前,如果没有找到都等待10秒,我试了,不好用,好多都不起作用,为什么不知道
3.显式等待,针对某个元素,找不到之前等待,找到之后立刻执行下一句,查找时间超过给定时间就报错
方法一
from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait driver=webdriver.Chrome() driver.get("www.") wait=WebDriverWait(driver,10,0.5) #最多等待十秒,一个文件定义一次就可以了, wait.until(lambda driver:driver.find_element_by_xpath('aaa'))#找到该xpath对应的元素后,立刻执行下一步 driver.find_element_by_xpath('aaa').click()#点击元素 wait.until(lambda driver:driver.find_element_by_xpath('bbb'))#找到该xpath对应的元素后,立刻执行下一步 driver.find_element_by_xpath('aaa').send_keys("bbb")#输入文本
方法二
用expected_conditions判断
expected_condtions提供了16种判断页面元素的方法:
1.title_is:判断当前页面的title是否完全等于预期字符串,返回布尔值
2.title_contains:判断当前页面的title是否包含预期字符串,返回布尔值
3.presence_of_element_located:判断某个元素是否被加到dom树下,不代表该元素一定可见
4.visibility_of_element_located:判断某个元素是否可见,可见代表元素非隐藏,并且元素的宽和高都不为0
5.visibility_of:跟上面的方法是一样的,只是上面需要传入locator,这个方法直接传定位到的element就好
6.presence_of_all_elements_located:判断是否至少一个元素存在于dom树中,举个例子,如果页面上有n个元素的class都是'coumn-md-3',name只要有一个元素存在,这个方法就返回True
7.text_to_be_present_in_element:判断某个元素中的text文本是否包含预期字符串
8.text_to_be_present_in_element_value:判断某个元素中的value属性值是否包含了预期字符串
9.frame_to_be_availabe_and_switch_to_it:判断该frame是否可以switch进去,如果可以,则返回True并且switch进去,否则返回False
10.invisibility_of_element_located:判断某个元素是否不存在于dom树或不可见
11.element_to_be_clickable:判断某个元素是见并且是enable(有效)的,这样的话才叫clickable
12.staleness_of:等某个元素从dom树下移除,返回True或False
13.element_to_be_selected:判断某个元素是否被选中,一般用于select下拉表
14.element_selection_state_to_be:判断某个元素的选中状态是否符合预期
15.element_located_selection_state_to_be:跟上面的方法一样,只是上面的方法传入定位到的element,这个方法传入locator
16.alert_is_present:判断页面上是会否存在alert
以上16种部分可以用下面的方法做等待判断
from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC driver=webdriver.Chrome() driver.get("www.") wait=WebDriverWait(driver,10,0.5) #最多等待十秒,一个文件定义一次就可以了, locator=(By.XPATH,'aaa') wait.until(EC.presence_of_element_located(locator))#找到该xpath对应的元素后,立刻执行下一步 driver.find_element_by_xpath('aaa').click()#点击元素