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

Python Selenium+Geckodriver无头模式远程服务器启动超时求助

问题:Selenium+Firefox无头模式在远程服务器启动超时

我用Python编写了基于Selenium的程序,本地运行正常,但部署到配置无头模式的远程服务器后出现启动问题。

驱动配置代码

# necessary imports
from time import sleep

from selenium.webdriver.firefox.service import Service
from seleniumwire import webdriver
# end imports

def configure_firefox_driver_with_proxy(proxy_host=None, proxy_port=None):
    print("Point 1")
    options = webdriver.FirefoxOptions()
    print("Point 2")
    options.add_argument("--headless")
    print("Point 3")
    options.binary_location = '/usr/bin/firefox'
    print("Point 4")
    driver_path = '/root/geckodriver/geckodriver'
    print("Point 5")
    service = Service(driver_path)
    print("Point 6")
    service.log_path = '/root/[my folder]/geckodriver.log'
    print("Point 7")

    if not proxy_host or not proxy_port:
        print("Point 8")
        return webdriver.Firefox(
        options=options,
        service=service
    )
    seleniumwire_options = {
        'proxy': {
            'http': f'socks5://{proxy_host}:{proxy_port}',
            'https': f'socks5://{proxy_host}:{proxy_port}',
            'no_proxy': 'localhost,127.0.0.1',
            'proxy_type': 'manual'
        }
    }

    return webdriver.Firefox(
        service=service,
        options=options,
        seleniumwire_options=seleniumwire_options
    )

测试代码

def geckotest():
    driver = configure_firefox_driver_with_proxy()
    print("Point 9")
    driver.get([some site])
    print("Point 10")    
    sleep(3)
    print("Point 11")
    driver.quit()

问题现象

程序能正常执行到Point 8,但在执行return webdriver.Firefox(options=options, service=service)时出现长时间卡顿,最终抛出错误:

urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='localhost', port=54001): Read timed out. (read timeout=120)

补充信息:

  • 指定目录未生成geckodriver日志
  • Selenium版本为4.31.0
  • 单独启动geckodriver可正常监听4444端口

解决建议

  • 检查版本兼容性:确认服务器上Firefox版本与Selenium 4.31.0兼容(官方要求Firefox 115+),版本不匹配则升级或降级Firefox/geckodriver。
  • 完善无头模式参数:在options中添加以下参数,适配服务器环境:
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-dev-shm-usage")
    options.add_argument("--disable-gpu")
    options.add_argument("--window-size=1920,1080")
    
    --no-sandbox用于绕过Linux环境的沙箱限制,--disable-dev-shm-usage解决临时空间不足问题。
  • 修复日志生成问题:给Service添加日志级别,并检查目录权限:
    service.log_level = 'DEBUG'
    
    确认/root/[my folder]目录有写入权限,若权限不足可更换为/tmp/geckodriver.log这类公共可写路径。
  • 排查SeleniumWire冲突:暂时替换为原生Selenium的webdriver测试,将from seleniumwire import webdriver改为from selenium import webdriver,验证是否是SeleniumWire导致的启动异常。
  • 延长启动超时时间:初始化驱动时增加timeout参数,给足够时间完成启动:
    return webdriver.Firefox(
        options=options,
        service=service,
        timeout=300  # 延长至5分钟
    )
    
  • 检查端口与防火墙:确认服务器本地防火墙未拦截Selenium随机使用的端口(如54001),同时排查是否有其他进程占用相关端口。

内容的提问来源于stack exchange,提问作者Donna Lizard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:20:03