selenium的等待认识
在前面的章节中我们一直使用python
中内置模块time
设置休眠时间,在seleniun
模拟浏览器请求的时候,有时候由于网速问题或者别的因素,造成浏览器还没加载出来,但是我们就直接访问不存在的元素的时候,会产生错误出现,我们就要使用等待页面加载完成后再继续执行,在selenium
中等待的类型有两种:
- 1、隐式等待-当查找的节点没有出现会等待指定的时间,如果指定的时间还没出现就会抛出异常(类似一个女孩在等待一个高富帅的帅哥来娶你,可是到了35岁还没到,你只能放弃了)
- 2、显示等待-根据指定要查找(等待)的节点,给一个最长等待的时间,如果超出等待时间就抛出异常,如果提前出现就不在等待(类似你在等待女神做你女朋友的时候,你对自己说三年内如果追不到就放弃,如果一年内就追求到了,就去拍拖了....)
一、隐式等待
from selenium import webdriver
browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get('https://www.baidu.com')
browser.quit()
二、显示等待
1、导包
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
2、访问淘宝,显示等待
browser = webdriver.Chrome() browser.get('https://www.taobao.com/') try: # 设置等待时间 wait = WebDriverWait(browser, 10) # 设置加载id="q"的节点 input = wait.until(EC.presence_of_element_located((By.ID, 'q'))) button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search'))) print(input, button) finally: browser.quit()
三、关于显示等待的条件
等待条件 | 描素 |
---|---|
title_is | 标题是某内容 |
title_contains | 标题包含某内容 |
presence_of_element_located | 节点加载出来,传入定位元组,如(By.ID, 'p') |
visibility_of_element_located | 节点可见,传入定位元组 |
visibility_of | 可见,传入节点对象 |
presence_of_all_elements_located | 所有节点加载出来 |
text_to_be_present_in_element | 某个节点文本包含某文字 |
text_to_be_present_in_element_value | 某个节点值包含某文字 |
frame_to_be_available_and_switch_to_it | 加载并切换 |
invisibility_of_element_located | 节点不可见 |
element_to_be_clickable | 节点可点击 |
staleness_of | 判断一个节点是否仍在DOM,可判断页面是否已经刷新 |
element_to_be_selected | 节点可选择,传节点对象 |
element_located_to_be_selected | 节点可选择,传入定位元组 |
element_selection_state_to_be | 传入节点对象以及状态,相等返回True,否则返回False |
element_located_selection_state_to_be | 传入定位元组以及状态,相等返回True,否则返回False |
alert_is_present | 是否出现警告 |