Selenium页面等待

页面等待

现在的网页越来越多采用了Ajax技术,这样程序便不能确定何时某个元素完全加载出来了。如果实际页面等待时间过长导致某个dom元素还没出现,但是你的代码直接使用了这个WebElement,那么就会抛出NullPointer的异常。

为了避免这种元素定位困难而且会提高产生ElementNotVisibleException的概率,所以Selenium提供了两种等待方式:一种是隐式等待;一种是显式等待。

显式等待

显式等待是指定某一条件直到这个条件成立时继续执行。

下表是一些内置的等待条件,可以直接调用这些条件,而不用自己写某些等待条件了。

方法

说明

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

frame加载并切换

invisibility_of_element_located

元素不可见

element_to_be_clickable

元素可点击

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
import time

driver = webdriver.Edge()
driver.get(
'https://www.jd.com/')
try:
    element = WebDriverWait(driver
,10).until(
        EC.presence_of_element_located((By.ID
,'search'))
    )
   
print(element)
    time.sleep(
5)
finally:
    driver.quit()

显式等待是在代码中定义等待一定条件发生后再进一步执行代码。

在抛出TimeoutException异常之前将等待10秒或者在10秒内发现了查找的元素。WebDriverWait默认情况下会每500毫秒调用一次ExpectedCondition直到结果成功返回。ExpectedCondition成功的返回结果是一个布尔类型的true或是不为null的返回值。

隐式等待

隐式等待是等待特定的时间。隐式等待比较简单,就是设置一个等待时间,单位为秒。当然如果不设置,默认等待时间为0。

from selenium import webdriver

import time



driver = webdriver.Edge()

driver.implicitly_wait(10)

driver.get('https://jd.com/')

myDynamicElement = driver.find_element_by_id('search')

print(myDynamicElement)

time.sleep(5)

driver.close()

driver.quit()

如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值