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

在DigitalOcean应用平台部署Django+Chromedriver遇错误127求助

解决方案:在DigitalOcean应用平台部署Django+Selenium+Chromedriver

1. 核心问题定位

错误码127的本质是缺少Chrome浏览器本体及相关系统依赖——chromedriver_binary仅提供驱动程序,无法替代浏览器本身,而DigitalOcean的默认Python构建镜像未预装Chrome及运行所需的底层库。

2. 安装系统级依赖

方式一:通过构建命令快速安装(适用于默认Python环境)

在DigitalOcean控制台的应用设置中,将构建命令修改为以下内容,在安装Python依赖前先安装系统库:

apt-get update && apt-get install -y chromium chromium-driver libnss3 libgconf-2-4 libxss1 libasound2 && pip install -r requirements.txt

这些依赖是Chrome无头模式运行的必要基础。

方式二:自定义Dockerfile(更可控)

如果默认构建环境限制apt命令,创建Dockerfile定义完整运行环境:

FROM python:3.10-slim

# 安装系统依赖与Chrome
RUN apt-get update && apt-get install -y --no-install-recommends \
    chromium \
    chromium-driver \
    libnss3 \
    libasound2 \
    && rm -rf /var/lib/apt/lists/*

# 设置工作目录
WORKDIR /app

# 安装Python依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 复制项目文件
COPY . .

# Django启动命令(替换为你的项目WSGI路径)
CMD ["gunicorn", "your_project.wsgi:application", "--bind", "0.0.0.0:8000"]

在DigitalOcean应用平台中选择「使用Dockerfile构建」即可。

3. 调整Selenium代码配置

基础版:指定系统驱动与浏览器路径

替换原有的get_webdriver函数,明确指定系统安装的Chrome和chromedriver路径:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

def get_webdriver(url):
    options = webdriver.ChromeOptions()
    # 指定DigitalOcean上Chromium的默认路径
    options.binary_location = "/usr/bin/chromium"
    # 无头模式优化参数
    options.add_argument('--headless=new')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument('--disable-gpu')
    options.add_argument('--window-size=1920,1080')

    # 使用系统安装的chromedriver
    service = Service('/usr/bin/chromedriver')
    driver = webdriver.Chrome(service=service, options=options)
    
    driver.get(url)
    return driver

进阶版:用webdriver-manager自动匹配版本

安装webdriver-manager(添加到requirements.txt),让它自动下载与Chrome匹配的驱动版本,避免手动版本对齐:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.core.os_manager import ChromeType

def get_webdriver(url):
    options = webdriver.ChromeOptions()
    options.binary_location = "/usr/bin/chromium"
    options.add_argument('--headless=new')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')

    # 自动下载适配的chromedriver
    service = Service(ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install())
    driver = webdriver.Chrome(service=service, options=options)
    
    driver.get(url)
    return driver

防检测场景:使用undetected-chromedriver

如果需要绕过网站反爬检测,直接利用你已导入的undetected_chromedriver,它会自动处理驱动伪装:

import undetected_chromedriver as uc

def get_webdriver(url):
    options = uc.ChromeOptions()
    options.binary_location = "/usr/bin/chromium"
    options.add_argument('--headless=new')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')

    driver = uc.Chrome(options=options, driver_executable_path='/usr/bin/chromedriver')
    driver.get(url)
    return driver

4. 验证部署

部署后可添加调试代码,确认Chrome与驱动版本匹配:

print("Chrome版本:", driver.capabilities['browserVersion'])
print("Chromedriver版本:", driver.capabilities['chrome']['chromedriverVersion'].split(' ')[0])

内容的提问来源于stack exchange,提问作者Adam Ben kahla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:55:42