最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

天天报道:隐性等待和显性等待

来源:博客园


(资料图片仅供参考)

一、隐性等待

implicitly_wait(30)的用法应该比time.sleep() 更智能,前者可以在一个时间范围内智能的等待,后者只能选择一个固定的时间的等待。文档解释:selenium.webdriver.remote.webdriver.implicitly_wait(time_to_wait)隐式地等待一个无素被发现或一个命令完成;这个方法每次会话只需要调用一次time_to_wait: 等待时间用法:browser.implicitly_wait(30)

1 # coding = utf-82 from selenium import webdriver3 import time #调入time 函数4 browser = webdriver.Firefox()5 browser.get("http://www.baidu.com")6 browser.implicitly_wait(30) #智能等待30秒,适用下方所有命令7 browser.find_element_by_id("kw").send_keys("selenium")8 browser.find_element_by_id("su").click() #30秒内找到su的id,立即点击,否则报异常9 browser.quit()

二、显性等待

WebDriverWait显性等待的场景:操作引起了页面的变化,而接下来要操作变化的元素的时候,就需要使用显性等待。

以百度首页登录界面为例子,比如点击登录后,在登录界面点击短信登录进行切换:

当我们不点击登录时,发现在dom树中,根本没有短信登录的元素,所以,我们要想点击这个元素,那就需要等待这个元素加载到dom树中,可以找到才行:

1 from selenium import webdriver 2 from time import sleep 3 from selenium.webdriver.support.wait import WebDriverWait 4 from selenium.webdriver.support import expected_conditions as EC 5 from selenium.webdriver.common.by import By 6  7 # 创建谷歌浏览器对象, 会话开始 8 chrome_driver = webdriver.Chrome() 9 10 # 访问百度11 chrome_driver.get("http://www.baidu.com")12 # 定位登录按钮并进行点击13 chrome_driver.find_element_by_xpath("//*[@id="s-top-loginbtn"]").click()14 15 sleep(5)16 #使用显性等待, 等待元素id="TANGRAM__PSP_11__changeSmsCodeItem"加载到dom树中,等待上限是10s,每0.8秒去验证一下条件是否成立.17 WebDriverWait(chrome_driver, 10, 0.8).until(EC.presence_of_element_located((By.ID,18                                                                             "TANGRAM__PSP_11__changeSmsCodeItem")))19 20 chrome_driver.find_element_by_id("TANGRAM__PSP_11__changeSmsCodeItem").click()

三、强制等待

time.sleep(3)

关键词: 会话开始 等待时间 谷歌浏览器