文章讲述了在使用Selenium测试时遇到页面未完全加载导致的执行延迟问题,介绍了设置`set_page_load_timeout`和修改`page_load_strategy`(正常、eager、none)两种解决方式,以提升测试效率。
摘要由CSDN通过智能技术生成
使用selenium测试中发现,页面元素已经加载出来可以进行操作,但是浏览器地址栏旁边还是一直在转圈,后面的代码也一直无法往下执行。
二、问题原因
selenium元素操作等方法是需要等待页面所有元素完全加载完成后才开始执行的,所以在页面未完成加载前,代码会一直等待页面加载不继续执行。
三、解决方式
1、
设置WebDriver的页面加载时间(
set_page_load_timeout
)
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)
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() 方式打开网页,如果是通过操作进行跳转的页面不适用
2、修改
WebDriver 的页面加载策略
(page_load_strategy)
WebDriver在加载页面时,根据默认的加载策略,是把get地址的页面及所有静态资源都下载完。
除了默认的策略,还可以选择eager和none两种策略,根据实际情况调整页面加载策略缩短等待时间,提高执行速度。
-
normal(默认):等待整个页面加载完成,包括文件、css、js等等
-
eager:等待整个dom树加载完成,即DOMContentLoaded事件完成,也就是只要html完全加载和解析完成。放弃等待图片、样式、子框架的加载。
-
none:等待html下载完成,哪怕还没开始解析。
1)页面加载策略为normal
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
2)页面加载策略为eager
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
3)页面加载策略为none
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
* 修改页面加载策略的方式时可以配合显示等待,避免所需元素非可交互的状态时,就过早的进行之后的操作,导致产生报错
最近在编写
selenium自动化测试框架,遇到一个烦人的
问题, driver.get()不执行完,
浏览器页面一直在转圈圈,下面的代码根本就不会执行,耗时一天的
时间终于
解决了。
原理:driver.get() 方法默认等待
页面加载完成,再往下执行。
解决方案1:
设置
页面超时
时间,超过该
时间的时候,就停止
加载页面
driver.set_page_load_timeout(2)
driver.get(cls.base_url)
org.openqa.selenium.TimeoutException: timeout: Timed out receiving message from renderer: 60.000
# 修改
页面加载策略
desired_capabilities = DesiredCapabilities.CHROME
# 注释这两行会导致最后输出结果的延迟,即等待
页面加载完成再输出
desired_capabilities["pageLoadStrategy"] = "none"
有不少粉丝,甚至一些行业中有一定经验的朋友都说
selenium性能差、很慢,
打开一个
网页要等半天才开始执行。初学的粉丝提出这个
问题我能够理解,行业工作经验数年还这样说我就有点诧异了。看来很多小伙伴还是没有阅读官方文档的习惯,这里就简单的讲解一下为什么你会觉得
selenium慢以及如何
解决这个
问题:
当我们通过webdriver(比如启动谷歌
浏览器:webdriver.Chrome())启动
浏览器时,会启动一个没有任何缓存、cookie的
浏览器。这个时候通过driver.get("https://x
Selenium 页面加载慢
问题描述:
使用Selenium获取网页,发现webdriver.get方法会阻塞直到网页全部加载完成,官方提供的三种wait方法仅对网页的ajax有比较明显的效果。对于部分网页,网页中所需要的元素很快就能加载完成,但是整个页面加载完成却需要很久,所以如何才能使得网页在加载完所需要元素后即停止。
问题解决:
pageLoadStrategy设置...
一、在option配置了如下参数:发现selenium加载运行超级慢 option = webdriver.ChromeOptions()
option.add_experimental_option("excludeSwitches", ['enable-automation'])
option.add_argument('--no-sandbox') option.add_argument('--disable-gpu')
option.add_argument('-
Selenium可以通过设置超时时间或页面加载策略来提前结束页面加载。一种方法是设置超时时间,即使页面没有完全加载完成,也可以执行下一步操作。例如,可以使用`driver.set_page_load_timeout()`方法设置页面加载时间,然后使用`driver.execute_script('window.stop()')`来停止页面加载。这样可以在页面加载时间到期后提前结束加载并执行后续代码。
另一种方法是将页面加载策略设置为`none`,这意味着页面不会自动等待加载完成,而是立即执行后续代码。可以通过使用`options.page_load_strategy = 'none'`来配置页面加载策略。
这两种方法都可以让Selenium在页面加载完成之前提前结束加载,以便更快地执行后续操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [selenium:如何解决打开网页加载时间过长问题](https://blog.csdn.net/qq_33480558/article/details/126062337)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]