设置元素等待

# 设置元素等待
# 显式等待 WebDriverWait :针对某一个元素进行相关等待判定
# 隐式等待: 不针对某一个元素等待,全局等待


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

driver = webdriver.Chrome()
driver.get('https://baidu.com')
# 显式等待,设置等待时间,检查kw元素是否存在
element = WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,'kw')))
element.send_keys('selenium')
sleep(5)
driver.quit()

# WebDriverWait类是由webdriver提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,
# 如果超过设置时间检测不到则抛出异常。具体格式如下:
# WebDriverWait(driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)
# driver    浏览器驱动
# timeout   最长超时时间,默认以秒为单位
# poll_frequency    检测的间隔(步长)时间,默认为0.5S
# ignored_exceptions    超时后的异常信息,默认情况下抛NoSuchElementException异常
# WebDriverWait一般由until(),until_not()配合使用

 

# is_displayed() 判断元素是否显示
from selenium import webdriver
from time import sleep,ctime

driver = webdriver.Chrome()
driver.get('https://baidu.com')

print(ctime())
for i in range(10):
    try:
        s = driver.find_element_by_id('su1')
        if s.is_displayed():
            break
    except:
        pass
    sleep(1)
else:
    print('time out')
driver.close()
print(ctime())

 

# 隐式等待是通过一定时长等待页面上某元素加载完成。如果超出了设置的时长元素还没有被加载,则抛出NoSuchElementException异常。
# webdriver提供了implicitly_wait()方法来实现隐式等待,默认设置为0。默认单位为秒
# 设置的等待时间并不是一个固定时间,并不会影响脚本的执行速度。定位到元素则继续执行,定位不到,则它将以轮询的方式
# 不断地判断元素是否被定为到,直到超出设置时长还没有定位到元素,则抛出异常

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import sleep,ctime

driver = webdriver.Chrome()
driver.get('http://baidu.com')

#设置隐试等待时间
driver.implicitly_wait(10)
try:
    print(ctime())
    driver.find_element_by_id('kw1').send_keys('selenium')
except NoSuchElementException as msg:
    print(msg)
finally:
    print(ctime())
    driver.quit()

 

posted @ 2019-03-10 20:23  必秋秋  阅读(228)  评论(0)    收藏  举报