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

Selenium ChromeDriver使用XPath枚举元素时出现chrome not reachable异常

解决ARM平台下Selenium Chrome无头模式"chrome not reachable"异常问题

你遇到的这个问题在ARM架构设备(比如你的Tinkerboard)上的无头Chrome环境里非常典型,主要和Chrome启动参数配置、ARM平台兼容性以及资源限制有关。下面一步步分析原因并给出解决方案:

问题核心原因

  1. ARM无头Chrome的特殊启动需求:默认的Chrome沙箱机制在ARM平台上容易出现兼容性问题,而且无头模式下如果不指定窗口大小,会导致驱动无法正常连接到浏览器进程。
  2. Selenium参数写法过时:Selenium 3.0+版本已经弃用了chrome_options参数,改用options,虽然旧参数偶尔能兼容,但可能触发潜在的连接问题。
  3. ARM设备内存限制:Tinkerboard这类ARM设备内存有限,无头Chrome启动时如果没有做内存优化,容易因进程崩溃导致"not reachable"。

具体解决方案

1. 修正Chrome启动参数(关键步骤)

修改你的Options配置,添加ARM平台无头Chrome必须的参数:

opts = Options()
opts.headless = True
opts.binary_location = "/usr/bin/chromium"
# 针对ARM平台的核心优化参数
opts.add_argument('--no-sandbox')          # 禁用沙箱,ARM环境下几乎必须
opts.add_argument('--disable-dev-shm-usage') # 避免/dev/shm内存不足导致崩溃
opts.add_argument('--window-size=1920,1080') # 无头模式必须指定窗口大小
opts.add_argument('--disable-gpu')         # ARM平台大多无GPU加速,禁用避免报错

同时把驱动初始化代码从:

driver = webdriver.Chrome(chrome_options=opts)

改为符合Selenium 3.x+规范的写法:

driver = webdriver.Chrome(options=opts)

2. 简化代码并优化等待逻辑

你的代码里保留了Selenium <3.0的兼容逻辑,但从报错看你已经在用3.x版本,可以简化代码避免混淆,同时适当延长隐式等待时间确保页面加载完成:

def main():
    opts = Options()
    opts.headless = True
    opts.binary_location = "/usr/bin/chromium"
    # 添加ARM专属启动参数
    opts.add_argument('--no-sandbox')
    opts.add_argument('--disable-dev-shm-usage')
    opts.add_argument('--window-size=1920,1080')
    opts.add_argument('--disable-gpu')
    
    driver = webdriver.Chrome(options=opts)
    driver.maximize_window()
    
    agent = driver.execute_script('return navigator.userAgent')
    print(agent)
    
    driver.get("https://complaints.donotcall.gov/complaint/complaintcheck.aspx")
    driver.implicitly_wait(10)  # 延长等待时间,确保页面元素加载完成
    ids = driver.find_elements_by_xpath('//*[@id]')
    for ii in ids:
        print(ii.get_attribute('id'))
    
    driver.quit()

3. 系统层面的优化

  • 清理残留进程:运行脚本前先清理可能残留的Chromium或chromedriver进程:
    pkill chromium
    pkill chromedriver
    
  • 内存优化:如果你的设备内存紧张,可以添加内存限制参数:
    opts.add_argument('--max-old-space-size=512') # 限制Chrome内存为512MB
    
    同时关闭其他后台不必要的进程,释放内存。

4. 验证驱动兼容性

虽然你用的Chromium和chromedriver版本一致,但要确保chromedriver是官方针对ARM编译的版本,避免使用x86版本交叉编译的包,这类包在ARM平台容易出现兼容性问题。

测试验证

修改完成后重新运行./test.py,应该能正常输出页面所有id元素,不再出现"chrome not reachable"异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:06:04