在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
相关产品推荐
相关产品推荐

