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

Nginx+PHP环境下Selenium脚本仅命令行可用,浏览器调用失败求助

解决Nginx+PHP环境下Selenium脚本仅命令行可运行的问题

核心原因

命令行执行脚本用的是当前用户的权限和环境变量,而Nginx/PHP-FPM运行时依赖**www-data(或nginx、apache)**这类受限系统用户,权限不足、环境变量缺失会导致Selenium无法正常启动Chrome。

排查与解决步骤

1. 先捕获脚本错误信息

当前PHP代码没有捕获Python脚本的错误输出,修改exec.php把错误重定向到标准输出,方便定位问题:

$selenium = 'python3 /var/www/html/selenium/test.py 2>&1';
echo shell_exec($selenium);

重新通过浏览器访问页面,就能看到具体的错误提示(比如找不到Chrome、权限不足等)。

2. 调整Python脚本的Chrome启动参数

给ChromeOptions补充适配受限用户环境的必要参数,修改test.py:

#!/usr/bin/env python3
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')  # 非特权用户必须关闭沙箱模式
options.add_argument('--disable-dev-shm-usage')  # 解决/dev/shm临时空间不足问题
options.binary_location = '/usr/bin/google-chrome'  # 替换为你的Chrome实际路径(用`which google-chrome`命令查看)
# 若chromedriver不在系统PATH中,指定其绝对路径
driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver', options=options)
driver.get('http://localhost/info.php')
print(driver.title)
driver.quit()

3. 修复文件与目录权限

确保PHP运行用户能访问脚本和Chrome相关资源:

# 给Python脚本添加执行权限
chmod +x /var/www/html/selenium/test.py
# 递归设置脚本目录的所属用户为www-data
chown -R www-data:www-data /var/www/html/selenium/
# 确保Chrome二进制文件可执行
chmod +x /usr/bin/google-chrome

4. 验证受限用户环境

切换到www-data用户手动执行脚本,复现浏览器访问时的运行环境:

# 切换到www-data用户(若提示shell不存在,指定bash)
su -s /bin/bash www-data
# 执行Python脚本
python3 /var/www/html/selenium/test.py

如果这里出现报错,就是环境配置问题,根据错误提示进一步调整(比如安装缺失依赖、补充环境变量等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:02:02