Google App Engine上Selenium+ChromeDriver无头模式运行遇找不到Chrome二进制文件错误
解决Google App Engine上Selenium找不到Chrome二进制文件的问题
问题根源
Google App Engine的Python标准运行时基于Linux,默认未预装Chrome浏览器,且无法直接安装系统级软件;你本地Windows环境的Chrome路径和二进制文件在Linux环境下完全无效,这就是报错的核心原因。
解决方案:使用Custom Runtime(Flex环境)部署包含Chrome的镜像
因为标准环境无法安装系统软件,我们需要用自定义Docker镜像构建包含Chrome浏览器、匹配版本的Chromedriver以及Python应用的环境。
步骤1:编写Dockerfile
创建Dockerfile文件,内容如下:
# 基于Python 3.10轻量镜像 FROM python:3.10-slim # 设置工作目录 WORKDIR /app # 安装Chrome浏览器及依赖 RUN apt-get update && apt-get install -y \ wget \ gnupg \ && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' \ && apt-get update && apt-get install -y \ google-chrome-stable \ && rm -rf /var/lib/apt/lists/* # 安装与Chrome版本匹配的Chromedriver RUN CHROME_VERSION=$(google-chrome --version | grep -oP '\d+\.\d+\.\d+\.\d+') \ && wget -q https://chromedriver.storage.googleapis.com/${CHROME_VERSION}/chromedriver_linux64.zip \ && unzip chromedriver_linux64.zip -d /usr/local/bin/ \ && rm chromedriver_linux64.zip \ && chmod +x /usr/local/bin/chromedriver # 安装Python依赖 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制应用代码到容器 COPY . . # 启动应用(替换成你的应用入口命令,比如gunicorn或flask run) CMD ["gunicorn", "--bind", ":$PORT", "main:app"]
步骤2:修改Selenium代码
更新爬虫代码,指定Linux环境下的Chrome二进制路径和Chromedriver路径:
from selenium import webdriver from selenium.webdriver.chrome.service import Service chrome_options = webdriver.ChromeOptions() chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--headless=new") # 新版无头模式,兼容性更好 chrome_options.add_argument("--disable-gpu") chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) chrome_options.add_argument("--window-size=1536x754") # 指定Chrome二进制文件路径 chrome_options.binary_location = "/usr/bin/google-chrome" # 使用Docker中预安装的Chromedriver service = Service("/usr/local/bin/chromedriver") driver = webdriver.Chrome(service=service, options=chrome_options)
步骤3:配置app.yaml
创建或修改app.yaml,指定使用自定义运行时:
runtime: custom env: flex manual_scaling: instances: 1 resources: cpu: 1 memory_gb: 0.5 disk_size_gb: 10
步骤4:部署应用
使用gcloud命令部署:
gcloud app deploy
关键注意事项
- 不要使用本地Windows的Chrome路径或
.exe文件,Linux环境无法识别这些内容。 - 必须确保Chromedriver版本与安装的Chrome版本完全匹配,Dockerfile中的脚本会自动处理版本匹配问题。
- GAE Flex环境的自定义镜像部署需要一定时间,耐心等待部署完成后再测试。
内容的提问来源于stack exchange,提问作者Muhammad Daniyal
相关产品推荐
相关产品推荐

