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 是否出现警告

results matching ""

    No results matching ""