Debian Jessie下PHP Facebook WebDriver无法启动会话求助
Hey, let's work through this issue step by step—you've got a few common pitfalls here that we can fix quickly:
1. 修复版本兼容性(最关键问题)
你的ChromeDriver v2.9实在太老旧了(2014年发布的!),几乎肯定和Selenium 3.9.1、Debian Jessie上的Chrome版本不兼容。ChromeDriver有严格的版本匹配规则:它的主版本号必须和Chrome浏览器的主版本号完全一致(比如Chrome 114对应ChromeDriver 114.x.x.x)。
修复步骤:
- 先查看当前Chrome版本:
google-chrome --version - 下载与Chrome版本匹配的ChromeDriver,替换掉你当前的
/srv/www/XXXX/build/chromedriver - 确保驱动有可执行权限:
chmod +x /srv/www/XXXX/build/chromedriver
2. 修正Selenium启动命令的语法错误
你执行的启动命令有个致命拼写错误:-Dwebdriver.chrome.driver参数需要用等号连接参数名和路径,而不是斜杠。这直接导致Selenium找不到ChromeDriver。
用这个修正后的命令启动:
java -Dwebdriver.chrome.driver=/srv/www/XXXX/build/chromedriver -jar selenium-server-standalone-3.9.1.jar
3. 验证Selenium服务器是否正常运行
启动Selenium后,查看控制台输出。如果正常运行,你会看到类似这样的日志:
INFO - Selenium Server is up and running on port 4444
也可以用curl测试服务器状态:
curl http://localhost:4444/wd/hub/status
如果返回包含"ready": true的JSON响应,说明服务器启动成功。
4. 检查PHP WebDriver代码的参数配置
错误提示提到格式错误的{"desiredCapabilities"}参数,这说明你的PHP代码可能传递了空的或结构错误的能力对象。确保代码类似这样:
use Facebook\WebDriver\Remote\DesiredCapabilities; use Facebook\WebDriver\Remote\RemoteWebDriver; use Facebook\WebDriver\Chrome\ChromeOptions; // 针对服务器无GUI环境配置无头模式(Debian Jessie通常没有图形界面) $options = new ChromeOptions(); $options->addArguments([ '--headless', '--disable-gpu', '--no-sandbox', // Debian系统避免权限问题必需 '--disable-dev-shm-usage' ]); // 连接到Selenium服务器 $driver = RemoteWebDriver::create( 'http://localhost:4444/wd/hub', DesiredCapabilities::chrome()->setCapability(ChromeOptions::CAPABILITY, $options) );
这样能确保你传递了有效的Chrome配置,包括服务器环境必需的无头模式参数。
5. 修复Debian Jessie的系统依赖
Debian Jessie版本较老,可能缺少Chrome/ChromeDriver运行所需的系统库,安装这些依赖:
apt-get update && apt-get install libxss1 libappindicator1 libindicator7 libgbm-dev
这些库能解决无头Debian系统上常见的“Chrome无法启动”问题。
内容的提问来源于stack exchange,提问作者Patrick Müssig

