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

通过PHP执行Python脚本时导入Selenium WebDriver报错求助

解决PHP执行Python脚本时找不到Selenium模块的问题

我来帮你排查这个问题——这个报错的核心原因是PHP执行sudo切换到www-data用户时,使用的Python环境和你直接在bash里用的不是同一个,导致selenium模块不在www-data用户的Python搜索路径里。下面是几个可行的解决方案:

1. 指定Python的绝对路径

首先在你的bash终端里运行以下命令,找到你安装了selenium的Python版本的绝对路径:

which python  # 或者用 which python3,根据你实际使用的版本

比如输出可能是 /usr/local/bin/python3,然后修改PHP脚本里的命令,把python替换成这个绝对路径:

$dir = __DIR__;
# 替换成你找到的Python绝对路径
$command = "sudo -u www-data /usr/local/bin/python3 ".$dir."/script.py 2>&1";
$pid = popen( $command,"r");
while( !feof( $pid ) ) {
    echo fread($pid, 256);
    flush();
    ob_flush();
    usleep(200000);
}
pclose($pid);

这样就能确保www-data用户调用的是你安装了selenium的那个Python环境。

2. 为www-data用户安装Selenium

如果你希望直接让www-data的Python环境拥有selenium模块,可以切换到www-data用户身份执行安装命令:

sudo -u www-data pip install selenium
# 如果是Python3,用 pip3
sudo -u www-data pip3 install selenium

执行完成后,再通过PHP运行脚本应该就能找到selenium模块了。

3. 给Python脚本添加Shebang行并设置执行权限

在你的Python脚本开头添加一行shebang,指定正确的Python路径:

#!/usr/local/bin/python3  # 替换成你找到的Python绝对路径
from selenium import webdriver
import time
import os
import os.path
# 其他脚本内容...

然后给脚本添加执行权限:

chmod +x /var/www/html/spreadsheet/script.py

之后PHP里的命令可以简化为:

$command = "sudo -u www-data ".$dir."/script.py 2>&1";

为什么直接在bash里运行正常?

因为你直接在bash中运行时,使用的是当前登录用户的Python环境,这个环境已经安装了selenium;而PHP通过sudo切换到www-data用户后,加载的是www-data用户的环境变量和Python路径,这个环境里默认没有安装selenium,或者调用的Python版本和你常用的不一样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:01:26