You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Python Selenium报错tried to run command without establishing a connection

报错原因
  • 浏览器/驱动进程资源泄漏崩溃:全局仅初始化了一次Firefox驱动实例,长时间循环加载大量页面的过程中,浏览器会累积缓存、内存占用持续升高,最终触发进程崩溃,导致geckodriver和浏览器之间的连接被断开,后续所有调用driver的操作都会抛出连接不存在的错误。
  • 异常页面触发断连:采集过程中如果遇到响应异常、反爬拦截的页面,可能导致浏览器无响应,驱动会主动断开和浏览器的连接,现有代码没有重连逻辑,断连后所有请求都会失败。
  • 系统资源不足:长时间高负载运行时,系统可能为了保障整体稳定性主动杀掉占用资源过高的浏览器进程,直接导致连接中断。
解决方案

1. 新增连接存活检测+自动重连逻辑

每次调用driver操作前先检测连接是否正常,一旦检测到断连就自动重新初始化驱动实例,示例代码如下:

from selenium.webdriver import Firefox, Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException, WebDriverException
import time

options = Options()
options.add_argument('--headless')
# 新增优化参数降低资源占用
options.add_argument('--disable-gpu')
options.add_argument('--disable-images')
options.add_argument('--disk-cache-size=0')

driver = None
driver_path = 'C:/Program Files/Mozilla Firefox/geckodriver'

# 初始化/重连驱动的工具函数
def init_driver():
    global driver
    if driver:
        try:
            driver.quit()
        except:
            pass
    driver = Firefox(options=options, executable_path=driver_path)

# 首次初始化驱动
init_driver()

def get_attack_mention_count(mention,srch_resultsQ):
    global driver
    totalQ=0
    page_count = 0
    # 每处理30个页面主动重启一次驱动,避免资源累积
    restart_threshold = 30
    for result in srch_resultsQ:
        page_count +=1
        if page_count % restart_threshold == 0:
            init_driver()
        
        url=result['link'][2]['@href']
        # 每次get前先检测连接是否正常
        try:
            # 调用轻量driver操作校验连接状态
            _ = driver.current_url
        except WebDriverException:
            # 连接异常,重新初始化驱动
            init_driver()

        try:
            driver.get(url)
        except WebDriverException:
            print("连接异常,重试加载URL:",url)
            init_driver()
            driver.get(url)
            
        print("URL:",url)
        time.sleep(3)
        delay = 20 # 秒
        try:
            myElem = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.CLASS_NAME, 'Highlight-module__1p2SO')))
            print ("页面加载完成!")
        except TimeoutException:
            print ("页面加载超时!")
            continue
        except:
            print ("页面加载出现异常")
            continue
        text_elements =  driver.find_elements_by_class_name("Highlight-module__1p2SO")
        for element in text_elements:
            element_text=element.text
            count = sum(element_text.replace("-"," ").upper().count(x.upper().replace("-"," ")) for x in mention)
            print("匹配计数:",count)
            totalQ+=count
        print("当前页面处理完成,关键词",mention,"累计计数: ",totalQ)
    print ("总匹配次数= ",totalQ)
    return totalQ

2. 优化驱动资源占用

给启动参数增加禁用GPU、禁用图片、限制缓存大小的配置,降低浏览器内存增长速度,延长驱动稳定运行的时间。

3. 定期主动重启驱动

设置阈值,每处理固定数量的页面就主动quit旧驱动、启动新驱动,从根源上避免资源累积导致的崩溃问题。

内容的提问来源于stack exchange,提问作者Travelling Salesman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:06:05