You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在Ubuntu Server上无头运行ChromeDriver?Java Selenium迁移求助

解决方案:Ubuntu 16.04 Server 无头 Chrome + Selenium 问题排查

Hey there! Let's work through this headless Chrome issue on your Ubuntu server step by step—these kinds of environment-specific quirks are super common when shifting from Windows to Linux, so we'll get you sorted.

1. 先确认ChromeDriver的路径与权限

  • 服务器上的ChromeDriver没有.exe后缀哦!你得把代码里的路径改成Linux下的可执行文件路径,比如如果把ChromeDriver放在/usr/local/bin/目录,代码要写成:
    System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver");
    
  • 还要确保ChromeDriver有执行权限,在服务器终端跑这条命令:
    chmod +x /usr/local/bin/chromedriver
    

2. 配置无头模式的关键参数

Chrome 65版本的无头模式需要明确启用,而且服务器环境下必须加几个参数绕过沙箱和内存限制,修改你的代码如下:

System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver");

// 配置Chrome无头模式选项
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");          // 启用无头模式
options.addArguments("--no-sandbox");        // 禁用沙箱,服务器无图形环境必备
options.addArguments("--disable-dev-shm-usage"); // 解决Linux下/dev/shm空间不足的问题
options.addArguments("--window-size=1920,1080"); // 设置窗口大小,避免元素定位异常

WebDriver driver = new ChromeDriver(options);
driver.get("someurl.com");

3. 安装Chrome运行必需的依赖库

Ubuntu Server默认缺少Chrome运行需要的一些系统库,哪怕是无头模式也得装,终端执行这条命令:

sudo apt-get update
sudo apt-get install -y libxss1 libappindicator1 libindicator7 libnss3-dev libgconf-2-4

如果还是有问题,可以补全更多依赖:

sudo apt-get install -y libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxtst6 ca-certificates fonts-liberation lsb-release xdg-utils

4. 开启日志排查具体错误

如果以上步骤都试过还是不行,打开ChromeDriver的日志来定位问题:

// 开启详细日志,指定日志文件路径
System.setProperty("webdriver.chrome.logfile", "/var/log/chromedriver.log");
System.setProperty("webdriver.chrome.verboseLogging", "true");

之后查看日志文件内容,里面会明确告诉你启动失败的原因——比如依赖缺失、路径错误或者版本不兼容等。

5. 最后再确认版本兼容性

你提到的Chrome 65对应ChromeDriver 2.37是完全兼容的(ChromeDriver 2.37支持Chrome 64-66版本),但如果日志里提示版本不匹配,可以重新下载对应版本的ChromeDriver替换现有文件。


内容的提问来源于stack exchange,提问作者John Bartlett

火山引擎 最新活动