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

在Railway.app用Nixpacks部署undetected_chromedriver实例报错求助

问题分析

报错核心是undetected_chromedriver找不到Chrome浏览器本体。你当前的Nixpacks配置只装了chromedriver驱动,但没安装Chrome浏览器程序,导致库启动时无法定位到浏览器可执行文件,触发executable为None的TypeError。

解决方案

1. 更新Nixpacks配置,补装Chrome浏览器

修改nixpacks.toml,在nixPkgs里加chromium(Nix生态中chromium是Chrome兼容的浏览器包),同时补充无头运行所需的依赖:

# nixpacks.toml

[phases.setup]
nixPkgs = ["...", "chromium", "chromedriver"]
aptPkgs = ["...", "libglib2.0-0", "libnss3", "libgconf-2-4", "libfontconfig1", "libx11-6", "libx11-xcb1", "libxcb1"]

[start]
cmd = 'python src/main.py'
  • 新增的libx11系列依赖是为了解决无头Chrome运行时的X11依赖问题。

2. 代码中显式指定Chrome路径

Nix安装的chromium固定路径为/run/current-system/sw/bin/chromium,直接在创建driver时指定该路径,避免自动查找失败:
修改driver.py:

import logging
import undetected_chromedriver as uc
from selenium.webdriver.chrome.options import Options

def create_driver():
    logging.getLogger().setLevel(logging.INFO)
    logging.info("Creating driver")
    
    options = Options()
    options.add_argument("--headless=new")  # 用新版无头模式,兼容性更强
    options.add_argument("--no-sandbox")    # 适配Railway容器的沙箱限制
    options.add_argument("--disable-dev-shm-usage")  # 避免/dev/shm空间不足
    
    # 手动指定Nix安装的chromium路径
    driver = uc.Chrome(
        options=options,
        browser_executable_path="/run/current-system/sw/bin/chromium"
    )
    logging.info("Driver successfully created")
    return driver

3. 可选优化:用环境变量替代硬编码

不想在代码里写死路径的话,可在Railway项目的环境变量中添加:
CHROME_BIN=/run/current-system/sw/bin/chromium
然后代码中读取环境变量:

import os
# ...
browser_executable_path = os.getenv("CHROME_BIN", "/run/current-system/sw/bin/chromium")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:47:45