Python Selenium页面加载慢超时解决方案:设置pageLoadStrategy为none

Evan
Evan
发布时间:2026-10-14| 6人浏览过
原创

本文介绍Python Selenium中解决页面加载超时导致程序阻塞的问题。通过设置Chrome的pageLoadStrategy为none,使get()方法在HTML加载完成后立即返回,不再等待JS或图片资源。该方法避免了set_page_load_timeout导致的driver失效风险,实现了快速定位元素并继续操作的目标。

Selenium页面加载超时问题背景

开发环境配置如下:

操作系统为win10-64位,Python版本为2.7.16,Chrome浏览器版本为77。


from selenium import webdriver
driver = webdriver.Chrome(executable_path='chromedriver.exe')
driver.get('http://全部加载完成超级慢的网站')

user = 'abc'
pwd = '123

driver.find_element_by_id('email').send_keys(user)
driver.find_element_by_id('pass').send_keys(pwd)

首先观察一段典型的Selenium代码:

当执行driver.get()后,程序会进入阻塞状态,直到网站所有资源完全加载。在此期间,无法执行后续任何代码,必须等待get操作彻底完成。

这种等待时间可能长达5分钟或更久。

实际上,网页主体可能在5秒内已打开,但后台仍在加载JavaScript脚本和图片等资源,导致加载速度极慢。然而,此时人工已可操作网页。

针对此问题,网上提供了多种解决方案。

其中一种常见做法如下(引用自网络):

set_page_load_timeout方法的缺陷


from selenium import webdriver
driver=webdriver.Chrome()
driver.set_page_load_timeout(5)
driver.set_script_timeout(5)#这两种设置都进行才有效

try:
  d.get(s)
except:
  d.execute_script('window.stop()')#这句话好像没什么软用

该方案声称可在页面停止加载后继续操作。

通过设置driver.set_page_load_timeout(5),确实能在5秒后停止加载。但随之而来的是driver进程崩溃,后续所有操作均返回timeout错误。即使尝试使用try-except捕获异常,driver也已彻底失效,只能重新启动浏览器。

注意:使用set_page_load_timeout时,若页面未加载任何内容(如HTML源码未完整加载)即因超时而停止,会导致driver失效。后续对driver的任何操作均无法执行。因此,超时设置应确保页面内容至少加载一部分,且超时时间不宜过短。如图所示,在页面此种状态下停止加载后driver失效。

有人指出不能设置过短,否则driver会失效。但实际测试表明,即使设置为5分钟,只要发生一次超时,driver即告失效,导致程序直接崩溃。

接下来介绍另一种方法。

WebDriverWait方法的局限性


# coding = utf-8
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
import time

driver = webdriver.Chrome()
class button():
  def __call__(self, driver):
    if driver.find_element_by_id('js_love_url'):
      return True
    else:
      return False 

driver.implicitly_wait(60)
time_start = time.time()
driver.get('https://www.163.com/')

# driver.find_element_by_id('js_love_url').click()
WebDriverWait(driver,2,0.5).until(button()) 
time_end = time.time()
print('access time is : ', time_end - time_start)
time.sleep(2)
driver.quit()

使用WebDriverWait进行显式等待。经测试,若driver.get()未执行完毕,后续代码根本不会执行,因此该方法依然无法解决阻塞问题。

经过多种尝试和失败后,最终找到了正确的解决方法。

其核心原理是将driver.get()操作改为非阻塞模式,即打开网页后直接返回,无需等待所有资源加载完成。

随后,可直接等待所需元素出现并进行后续操作。

配置过程非常简单。

通过pageLoadStrategy解决非阻塞加载


from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

#get直接返回,不再等待界面加载完成
desired_capabilities = DesiredCapabilities.CHROME
desired_capabilities["pageLoadStrategy"] = "none"

driver = webdriver.Chrome(executable_path='chromedriver.exe')

只需配置一个参数,即页面加载策略(pageLoadStrategy)。系统默认值为“normal”,即等待页面完全加载。将其设置为“none”,即可实现get操作完成后立即结束阻塞状态。

至此,关于Python Selenium页面加载慢超时问题的解决方案介绍完毕。更多相关Python Selenium加载慢内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。