Selenium遇无限加载页面超时后如何跳转新页面?
解决Selenium Chrome超时后后续请求无法跳转的问题
我之前也踩过一模一样的坑!这种情况本质是ChromeDriver在处理无限加载页面时,会话状态卡住了,导致后续的driver.get()命令根本无法被浏览器正确响应,自然也就不会跳转新URL。给你几个经过验证的解决思路:
1. 提前配置页面加载策略+超时后强制停止加载
默认情况下Selenium会等待页面所有资源加载完成才会继续执行,碰到无限加载的内容直接就卡死了。我们可以先修改页面加载策略,再配合超时处理:
from selenium import webdriver from selenium.common.exceptions import TimeoutException # 设置Chrome选项,改用 eager 加载策略(只等待DOM加载完成) options = webdriver.ChromeOptions() options.page_load_strategy = 'eager' # 可选值还有 'none',完全不等待加载 driver = webdriver.Chrome(chrome_options=options) # 设置页面加载超时时间(比如30秒) driver.set_page_load_timeout(30) try: driver.get("存在无限加载的问题页面URL") except TimeoutException: # 超时后强制停止页面加载 driver.execute_script("window.stop();") # 或者模拟按ESC键停止加载,某些场景下更有效 # from selenium.webdriver.common.keys import Keys # driver.send_keys(Keys.ESCAPE)
这样即使碰到无限加载的页面,也能及时终止加载,避免会话卡住。
2. 超时后彻底重启Driver实例
如果上面的方法还是没能挽救会话,那最稳妥的方式就是直接重启Driver:
try: driver.get("问题页面URL") except TimeoutException: # 彻底退出当前Driver进程,不要用close(),close()只关标签页 driver.quit() # 重新初始化Driver driver = webdriver.Chrome(chrome_options=options) # 现在再访问新URL就正常了 driver.get("正常的新URL")
旧的会话已经处于异常状态,强行复用只会继续出问题,重启是最直接的解决方式。
3. 检查版本兼容性(长期优化)
你当前用的Selenium 3.10.0 + ChromeDriver 2.35,对应的Chrome版本大概是62-64,这个组合确实存在一些会话泄漏的已知问题。如果条件允许,尽量把ChromeDriver版本和你本地的Chrome浏览器版本匹配(ChromeDriver版本要对应Chrome的大版本号),同时可以考虑把Selenium升级到3.x的较新版本,能减少这类奇怪的卡死情况。
内容的提问来源于stack exchange,提问作者user2667066
相关产品推荐
相关产品推荐

