Python selenium页面加载缓慢,超时解决办法

最近在编写selenium自动化测试框架,遇到一个烦人的问题, driver.get()不执行完,浏览器页面一直在转圈圈,下面的代码根本就不会执行,耗时一天的时间终于解决了。driver.get() 方法默认等待页面加载完成,再往下执行。

图片[1] - Python selenium页面加载缓慢,超时解决办法 - 正则时光

方法一

设置页面超时时间,超过该时间的时候,就停止加载页面

driver.set_page_load_timeout(2)  #设置页面加载超时时间
driver.set_script_timeout(6)     #设置脚本执行超时时间
try:
   driver.get(base_url)      #页面在前面设置的2s内没加载完成时,使用下面的JS强制停止加载
except Exception:
   driver.execute_script('window.stop()')

弊端:页面如果没有完全显示出来就停止加载,可能会导致我们脚本所需要的元素无法获取,会直接测试执行失败

方法二

由于get()方法是等待加载完成,才往下执行查找元素,那我们就不等页面加载完,就去查找我们想要的元素。

from time import sleep
from selenium import  webdriver
#1.导包,配置浏览器所需要的能力
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities   
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait    #导入网页驱动显性等待包
#2.实例化谷歌浏览器配置对象,可以实例化很多浏览器的配置对象,比如EDGE,FIREFOX,IPAD,IPHONE等
desired_capabilities = DesiredCapabilities.CHROME      
#3.设置谷歌浏览器配置对象的,页面加载属性为none。等级为normal,eager,none
desired_capabilities["pageLoadStrategy"] = "none"
#4.实例化谷歌浏览器驱动对象时,写入配置参数
driver=webdriver.Chrome(desired_capabilities=desired_capabilities)
print("正在打开网页")
driver.get("https://map.baidu.com")
print("网页打开完成")
try:
    e1=WebDriverWait(driver, 10, 0.5).until(lambda x: x.find_element(By.CSS_SELECTOR, 'a.close-btn')) #显性等待10s
    e1.click()
except Exception as e:
    print("报错:没有这个窗口!")

sleep(5)
driver.quit()

注意:使用这种方法时,配合元素等待方法。隐性和显性等待都行。效果最佳!

normal等待整个页面加载完毕
eager等到初始 HTML 文档完全加载和解析完毕,并放弃加载样式表、图像和子帧
none只等待初始页面下载完成
页面加载策略等级

方法三

跟方法二差不多,也是设置页面加载方式。只不过导入的包不一样而已。

from selenium import  webdriver
# 1.导入谷歌浏览器选项配置包
from selenium.webdriver.chrome.options import Options
# 2.实例化选项配置对象
options = Options()
# 3.配置页面加载策略,normal,eager,none。
options.page_load_strategy = 'eager'
# 4.实例化谷歌浏览器驱动时,定入配置参数
driver=webdriver.Chrome(options=options)

总结:使用方法二和方法三,不等待页面加载,加元素等待(显性等待和隐性等待),效果最佳!

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享