当前位置:首页>Linux>Linux服务器跑Selenium报错?大概率是这个原因

Linux服务器跑Selenium报错?大概率是这个原因

  • 2026-09-08 22:55:21
Linux服务器跑Selenium报错?大概率是这个原因

【Linux服务器跑Selenium报错?大概率是这个原因】

Selenium新手避坑指南

最近遇到好几个新手问同样的问题:

"我在本地Windows跑Selenium没问题,一放到Linux服务器就各种报错,到底怎么回事?"

这个问题我刚入行时也踩过坑。今天把Linux服务器跑Selenium最常见的5种报错和解决方案整理出来,帮你少走弯路。

▼ Selenium常见报错类型总览

「一、Chrome找不到:No such file or directory」

这是最常见的第一个坑。报错信息通常是:

selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.

原因:服务器上根本没装Chrome!

很多人以为装了Selenium包就够了,其实还需要:

1️⃣ 浏览器本身(Chrome/Chromium)

2️⃣ 对应的driver(chromedriver)

解决方案:

# Ubuntu / Debian sudo apt update sudo apt install -y chromium-browser wget https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_linux64.zip unzip chromedriver_linux64.zip sudo mv chromedriver /usr/bin/ sudo chmod +x /usr/bin/chromedriver

验证安装:

which google-chrome which chromedriver

「二、依赖库缺失:error while loading shared libraries」

装完Chrome后运行,又报新错:

error while loading shared libraries: libnss3.so.1: cannot open shared object file

原因:Chrome运行需要一堆系统库,裸机Linux通常没有。

解决方案:一次性安装所有依赖

▼ 系统依赖库安装命令

# Ubuntu / Debian 完整命令 sudo apt install -y \   libnss3 \   libatk1.0-0 \   libatk-bridge2.0-0 \   libcups2 \   libdrm2 \   libxkbcommon0 \   libxcomposite1 \   libxdamage1 \   libxfixes3 \   libxrandr2 \   libgbm1 \   libasound2 \   libatspi2.0-0

「三、显示器问题:Cannot find display :0」

这个错误很迷惑:

Error: Cannot find display :0 The browser appears to have exited unexpectedly.

原因:Linux服务器通常没有物理显示器,X11找不到DISPLAY环境变量。

解决方案A:使用Headless模式(推荐)

options = Options() options.add_argument('--headless') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage')

解决方案B:使用虚拟显示器Xvfb

sudo apt install -y xvfb  # 启动虚拟显示 Xvfb :99 -screen 0 1920x1080x24 & export DISPLAY=:99  # 然后运行测试 python test.py

解决方案C:使用pyvirtualdisplay(Python封装)

pip install pyvirtualdisplay  from pyvirtualdisplay import Display display = Display(visible=False, size=(1920, 1080)) display.start()  # 运行Selenium代码 driver = webdriver.Chrome(options=options) # ...

「四、沙盒限制:DevToolsActivePort file doesn't exist」

这个错误在root用户下特别常见:

The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.

原因:Chrome的沙盒模式在root用户下会失败。

解决方案:添加--no-sandbox参数

▼ 正确的Selenium启动配置代码

options = Options() options.add_argument('--headless') options.add_argument('--no-sandbox')  
# 关键!root用户必须 options.add_argument('--disable-dev-shm-usage')  # 避免共享内存问题 options.add_argument('--disable-gpu')

「五、共享内存问题:Chrome crashed unexpectedly」

这个错误比较隐蔽,在高并发或Docker环境中常见:

Chrome failed to start: crashed DevToolsActivePort file doesn't exist

原因:/dev/shm(共享内存)太小,Chrome无法启动。

解决方案A:添加--disable-dev-shm-usage

options.add_argument('--disable-dev-shm-usage')

解决方案B:挂载更大的shm(Docker环境)

# docker-compose.yml services:   selenium:     image: selenium/standalone-chrome:latest     shm_size: '2gb'  # 关键配置     volumes:       - /dev/shm:/dev/shm

▼ Selenium报错排查流程图

「六、终极方案:用Docker彻底避开环境问题」

上面这些问题,本质上都是"环境配置问题"。有没有一劳永逸的办法?

有!用Docker官方镜像,环境100%没问题:

# docker-compose.yml version: '3' services:   selenium:     image: selenium/standalone-chrome:latest     ports:       - "4444:4444"     shm_size: '2gb'     environment:       - SE_NODE_MAX_SESSIONS=5

Python代码连接:

from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities  driver = webdriver.Remote(     command_executor='http://localhost:4444/wd/hub',     desired_capabilities=DesiredCapabilities.CHROME )  driver.get('https://www.baidu.com') print(driver.title) driver.quit()

「七、调试技巧:截图大法」

Headless模式下看不到界面,出错时怎么调试?

技巧1:关键步骤截图

driver.save_screenshot('/tmp/step1_open.png') login_btn = driver.find_element('id', 'login') driver.save_screenshot('/tmp/step2_found_button.png') login_btn.click() driver.save_screenshot('/tmp/step3_after_click.png')

技巧2:打印页面源码

print(driver.page_source[:500])  # 打印前500字符

技巧3:设置窗口大小

options.add_argument('--window-size=1920,1080')  # 避免元素不可见

「八、总结:5分钟检查清单」

下次在Linux服务器跑Selenium遇到问题,按这个清单检查:

✅ Chrome/Chromium已安装

✅ chromedriver在PATH中

✅ 系统依赖库已安装

✅ 使用--headless模式

✅ 添加--no-sandbox(root用户)

✅ 添加--disable-dev-shm-usage

✅ 窗口大小设置正确

记住:90%的报错都是环境配置问题,不是代码问题!

先把环境配好,再调试代码。

💬 你在Linux服务器跑Selenium时遇到过什么奇葩错误?欢迎留言分享~

最新文章

随机文章