Selenium页面加载缓慢且意外自动关闭 如何持续开展页面探索
Selenium Firefox页面加载慢、自动关闭问题解决方案
核心问题原因
- 浏览器自动关闭是Selenium 4+版本的默认行为:代码执行到末尾后,驱动会自动回收进程关闭浏览器,并非页面主动触发关闭;另外页面加载超时抛出未捕获异常时,代码中断也会导致浏览器直接退出。
- 页面加载耗时长是因为默认
normal页面加载策略会等待所有静态资源、第三方广告/统计脚本、图片全部加载完成才会执行后续代码,目标站点存在大量第三方非核心资源,很容易出现加载卡住的情况。
具体配置步骤
- 配置浏览器 detach 参数,禁止执行完代码自动关闭
实例化Firefox驱动前先加载Options配置,开启detach模式,代码运行结束后浏览器会保持打开状态:from selenium.webdriver.firefox.options import Options from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC firefox_options = Options() # 禁止驱动自动关闭浏览器 firefox_options.add_experimental_option("detach", True) - 调整页面加载策略,缩短加载等待时间
将加载策略改为eager,只要DOM树解析完成就开始执行后续逻辑,不需要等待图片、第三方非核心资源加载完成,大幅减少加载等待时长:# 配置加载策略:DOM加载完成即返回,不等待全资源加载 firefox_options.page_load_strategy = 'eager' driver = webdriver.Firefox(options=firefox_options) - 配置超时规则+异常兜底,避免加载卡住中断流程
设置全局超时阈值,同时增加异常捕获逻辑,即使部分资源加载超时,也直接停止页面加载,操作已经渲染完成的DOM元素,不要等所有资源加载完:# 配置全局超时 driver.set_page_load_timeout(30) # 页面加载最长等待30秒 driver.set_script_timeout(30) # 脚本执行最长等待30秒 driver.implicitly_wait(5) # 元素查找隐式等待5秒 try: driver.get("https://b2b.fiba.gr/parts/filters/air-filter.html") # 显式等待目标元素加载完成,最长等20秒 links = WebDriverWait(driver, 20).until( EC.presence_of_all_elements_located((By.XPATH, "//a[@class='list-supplier-link']")) ) except Exception: # 触发超时异常时,强制停止页面剩余资源加载 driver.execute_script("window.stop();") # 直接获取已渲染的目标元素 links = driver.find_elements(By.XPATH, "//a[@class='list-supplier-link']") # 后续元素遍历、页面探索逻辑直接写在后面即可 print(f"获取到供应商链接数量:{len(links)}") - 兼容性排查
如果配置完还是出现闪退,检查本地Firefox浏览器版本和geckodriver驱动的大版本号是否一致,版本不兼容是驱动闪退的常见原因,替换成匹配的版本即可。
内容的提问来源于stack exchange,提问作者user17695678
相关产品推荐
相关产品推荐

