【selenium】解决页面加载时间过长问题

文章讲述了在使用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)

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() 方式打开网页,如果是通过操作进行跳转的页面不适用

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

* 修改页面加载策略的方式时可以配合显示等待,避免所需元素非可交互的状态时,就过早的进行之后的操作,导致产生报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值