Python学习 Day59 页面等待 07

页面等待

因为现在页面多使用Ajax请求,难以确定元素在当前时刻是否存在,若要使用的元素在当前时刻不存在,那么程序就会报错,解决的方案就是等待

一、selenium提供的两种等待方式

隐式等待
  • 调用driver.implicitly_wait,在获取不可用的元素之前,会先等待N秒钟的时间
显示等待
  • 显示等待是表明某个条件成立后才执行获取元素的 操作
  • 也可以在等待的时候指定一个最大的时间,若超出此时间就抛出一个异常
  • selenium.webdriver.support.excepted_conditions期望的条件
  • selenium.webdriver.support.ui.WebDriverWait

二、代码演示

在网页中查找不存在的元素,报错

from selenium import webdriver

#构造浏览器
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_id('abc') #在网页中查找不存在的元素,报错

在这里插入图片描述
隐式等待

from selenium import webdriver

#构造浏览器
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
#隐式等待
driver.implicitly_wait(5) #寻找元素时等待5s
driver.find_element_by_id('abc') #在网页中查找不存在的元素,报错

在这里插入图片描述
显示等待
在这里插入图片描述

在这里插入图片描述

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ec

#构造浏览器
driver = webdriver.Chrome()

#显示等待
driver.get('https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc')
WebDriverWait(driver,100).until(
    ec.text_to_be_present_in_element_value((By.ID,'fromStationText'),'北京')
)
WebDriverWait(driver,100).until(
    ec.text_to_be_present_in_element_value((By.ID,'toStationText'),'杭州')
)
btn = driver.find_element_by_id('query_ticket')
btn.click()

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值