赞
踩
使用selenium测试中发现,页面元素已经加载出来可以进行操作,但是浏览器地址栏旁边还是一直在转圈,后面的代码也一直无法往下执行。
selenium元素操作等方法是需要等待页面所有元素完全加载完成后才开始执行的,所以在页面未完成加载前,代码会一直等待页面加载不继续执行。
set_page_load_timeout(time) 方法可以设置页面的加载超时时间,在页面加载超出设置时间时会报错,Timed out receiving message from renderer: time
我们可以使用try…except 和 Javascript 的 window.stop() 方法结合使用,在超时后强制停止页面加载,继续执行之后的操作。
- import time
- from selenium import webdriver
-
- start = time.time()
-
- driver = webdriver.Chrome()
- # 设置页面加载时间
- driver.set_page_load_timeout(5)
-
- try:
- driver.get('https://search.damai.cn/search.html?keyword=111&spm=a2oeg.home.searchtxt.dsearchbtn')
- except:
- # 超时后执行Javascript停止页面加载
- driver.execute_script('window.stop()')
-
- end = time.time()
- # 计算页面加载时间
- print(end - start)
-
-
- >>>6.229357481002808
* 设置页面加载时间的方式只适用于使用 get() 方式打开网页,如果是通过操作进行跳转的页面不适用
WebDriver在加载页面时,根据默认的加载策略,是把get地址的页面及所有静态资源都下载完。
除了默认的策略,还可以选择eager和none两种策略,根据实际情况调整页面加载策略缩短等待时间,提高执行速度。
- import time
- from selenium import webdriver
-
- start = time.time()
-
- # 默认加载策略为normal,可以不进行设置
- driver = webdriver.Chrome()
- driver.get('https://search.damai.cn/search.html?keyword=111&spm=a2oeg.home.searchtxt.dsearchbtn')
-
- end = time.time()
- # 计算页面加载时间
- print(end - start)
-
-
- >>>22.998253345489502
- import time
- from selenium import webdriver
-
- start = time.time()
-
- options = webdriver.ChromeOptions()
- # 设置加载策略为eager
- options.page_load_strategy = 'eager'
- driver = webdriver.Chrome(options=options)
- driver.get('https://search.damai.cn/search.html?keyword=111&spm=a2oeg.home.searchtxt.dsearchbtn')
-
- end = time.time()
- # 计算页面加载时间
- print(end - start)
-
-
- >>>1.859546184539795
- import time
- from selenium import webdriver
-
- start = time.time()
-
- options = webdriver.ChromeOptions()
- # 设置加载策略为none
- options.page_load_strategy = 'none'
- driver = webdriver.Chrome(options=options)
- driver.get('https://search.damai.cn/search.html?keyword=111&spm=a2oeg.home.searchtxt.dsearchbtn')
-
- end = time.time()
- # 计算页面加载时间
- print(end - start)
-
-
- >>>1.1394140720367432
* 修改页面加载策略的方式时可以配合显示等待,避免所需元素非可交互的状态时,就过早的进行之后的操作,导致产生报错
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。