深入selenium三种等待方式使用
处理由于网络延迟造成没法找到网页元素
方法一
用time
模块不推荐使用
用time模块中的time.sleep来完成等待
from selenium import webdriver
import time
browser = webdriver.Chrome()
response = browser.get('https://www.12306.cn/index/')
#找到登入按钮点击
login_button_xpath = '//*[@id="J-header-login"]/a[1]'
login_button = browser.find_element_by_xpath(login_button_xpath)
while not login_button:
login_button = browser.find_element_by_xpath(login_button_xpath)
time.sleep(10)
login_button.click()
推荐Python大牛在线分享技术 扣qun:855408893
领域:web开发,爬虫,数据分析,数据挖掘,人工智能
零基础到项目实战,7天学习上手做项目
方法二
implicitly_wait(隐式等待)
-
隐式等待实际是设置了一个最长等待时间
-
如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步。
-
注意点
我们都知道js一般都是放在我们的body的最后进行加载,实际这是页面上的元素都已经加载完毕,我们却还在等带全部页面加载结束。 -
隐式等待对整个driver周期都起作用,在最开始设置一次就可以了。不要当做固定等待使用,到那都来一下隐式等待。
#隐式等待,失败概率高,可不用
browser.implicitly_wait(10)
#在10秒内,如果网页全部加载完成(包含js),则执行下一步,否则一直等到10秒结束后,在执行下一步
方法三
<