selenium三大等待机制

1 强制等待

import time
from selenium.webdriver import Chrome
br = Chrome()

br.get('https://www.baidu.com/')

br.find_element_by_xpath('//*[@id="kw"]').send_keys('大西瓜')

time.sleep(2)  # 强制等待2秒
br.quit()

2 隐式等待  比强制等待更加智能,设置一次对浏览器对象的整个生命周期生效;
          默默等待元素出现,出现即继续往下执行;如超过设置时间还是未找到则会报超时错误

import time
from selenium.webdriver import Chrome
br = Chrome()
br.implicitly_wait(3)  # 隐式等待,每次等待至多3秒
br.get('https://www.baidu.com/')

br.find_element_by_xpath('//*[@id="kw"]').send_keys('大西瓜')

time.sleep(2)
br.quit()

3 显示等待  指定条件进行等待
          等待元素被加载
          等待元素可见
          等待元素可点击

import time
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By  # 通过xx方式去查找元素
from selenium.webdriver.support.wait import WebDriverWait  # 等待机制,传入三个参数 浏览器对象、最长等待时间、轮巡时间;
# until()等待方法,需传入一个期望的等待条件;必须传入一个格式如(By.XPATH, '//*[@id="kw"]')的元组
from selenium.webdriver.support import expected_conditions as EC  # 期望等待条件

br = Chrome()
br.get('https://www.baidu.com/')
br.find_element(By.XPATH, '//*[@id="kw"]').send_keys('大西瓜')
# 等待(By.XPATH, '//*[@id="kw"]')这个元素加载到页面上再继续下一步操作
WebDriverWait(br, 3, 0.5).until(EC.presence_of_element_located((By.XPATH, '//*[@id="kw"]')))

# 等待(By.XPATH, '//*[@id="kw"]')这个元素在页面可见再继续下一步操作
WebDriverWait(br, 3, 0.5).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="kw"]')))

# 等待(By.XPATH, '//*[@id="kw"]')这个元素可点击状态再继续下一步操作
WebDriverWait(br, 3, 0.5).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="kw"]')))
time.sleep(2)
br.quit()

等待新窗口出现

import time
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.webdriver import WebDriver # 声明br类型




br = Chrome()
br.get('https://www.baidu.com/')
# br: WebDriver 声明br类型
def open_window(br: WebDriver, url='https://www.sohu.com/'):
    # 打开新窗口之前获取当前所有的窗口句柄
    s_windows = br.window_handles
    # 使用js代码打开新窗口,打开的窗口进行参数化
    js = 'window.open(arguments[0]);'
    br.execute_script(js, url)
    # new_window_is_opened(s_windows) 等待新窗口出现
    WebDriverWait(br,5,0.5).until(EC.new_window_is_opened(s_windows))
    # 切换到新窗口
    e_windows = br.window_handles
    br.switch_to.window(e_windows[-1])

# 操作新窗口的元素 br: WebDriver 必填 否则报错
def handler_sohu(br: WebDriver):
    ele1 = br.find_element(By.XPATH, '//span[text()="选品牌"]')
    ele1.location_once_scrolled_into_view
    ele1.click()
    time.sleep(5)

open_window(br)
handler_sohu(br)
time.sleep(3)
br.quit()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值