赞
踩
大佬们有没有遇到过一种情况,selenium打开网页后,即使页面已经加载出来可以操作了,但是浏览器地址栏旁边还是在转圈,后面的代码也一直无法往下执行。其实大部分原因是由于静态文件加载太慢或者外链的CDN挂了导致的。
一、设置WebDriver的页面加载超时时间
设置超时时间后页面不必全部加载完成就可以执行下一步
- from selenium import webdriver
-
- driver = webdriver.Chrome()
-
- # 设置页面加载时间
- driver.set_page_load_timeout(5)
-
- start = time.time()
-
- try:
- driver.get(driver.get('http://www.baidu.com'))
- except: # 捕获timeout异常
- driver.execute_script('window.stop()') # 执行Javascript来停止页面加载 window.stop()
-
- end = time.time()
- # 页面加载所需时间
- print(end-start)
-
- el = driver.find_element("name", value='wd')
- #对元素输入文本
- el.send_keys('这是我的第一次尝试')
- #找到搜索按钮并点击一次
- driver.find_element("id", value='su').click()
二、修改WebDriver的页面加载策略
默认情况下,SeleniumWebDriver在加载页面时,根据正常的加载策略,就是把get地址的页面及所有静态资源都下载完(如css、图片、js等)。
normal (默认):所有内容加载完成,包括文件、css、js等。
eager:等待初始HTML文档完全加载和解析,并放弃css、图像和子框架的加载。
none:仅等待初始页面下载即可操作。
页面加载策略为normal
- import time
- from selenium import webdriver
-
- start = time.time()
-
- driver = webdriver.Chrome()
- driver.get('http://www.baidu.com')
-
- end = time.time()
- print(end-start)
-
- el = driver.find_element("name", value='wd')
- #对元素输入文本
- el.send_keys('这是我的第一次尝试')
- #找到搜索按钮并点击一次
- driver.find_element("id", value='su').click()
-
-
- >>>15.416865825653076
页面加载策略为eager
- import time
- from selenium import webdriver
-
- options = webdriver.ChromeOptions()
- # 配置页面加载策略
- options.page_load_strategy = 'eager'
- driver = webdriver.Chrome(options=options)
-
- start = time.time()
-
- driver = webdriver.Chrome()
- driver.get('http://www.baidu.com')
-
- end = time.time()
- print(end-start)
-
- el = driver.find_element("name", value='wd')
- #对元素输入文本
- el.send_keys('这是我的第一次尝试')
- #找到搜索按钮并点击一次
- driver.find_element("id", value='su').click()
-
-
- >>>4.887652158737183
页面加载策略为none
- import time
- from selenium import webdriver
-
- options = webdriver.ChromeOptions()
- # 配置页面加载策略
- options.page_load_strategy = 'none'
- driver = webdriver.Chrome(options=options)
-
- start = time.time()
-
- driver = webdriver.Chrome()
- driver.get('http://www.baidu.com')
-
- end = time.time()
- print(end-start)
-
- el = driver.find_element("name", value='wd')
- #对元素输入文本
- el.send_keys('这是我的第一次尝试')
- #找到搜索按钮并点击一次
- driver.find_element("id", value='su').click()
-
-
- >>>3.415907144546509
几种方案各有千秋,大佬们请根据实际情况自行选择最优方案。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。