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

PHP调用Python脚本正常,引入Playwright模块后失效求解决

解决PHP调用带Playwright的Python脚本无输出问题

核心原因是PHP运行的系统用户(通常为www-data、apache或nginx)与你命令行登录用户的环境变量、权限、Playwright浏览器安装路径不一致,导致脚本无法正常执行但无错误反馈。以下是具体解决步骤:

1. 捕获错误输出,定位具体问题

默认shell_exec仅捕获标准输出(stdout),脚本执行的错误信息会输出到标准错误(stderr),先修改PHP命令,将stderr重定向到stdout,以便看到具体报错:

<?php
$command = escapeshellcmd('python3 test.py 2>&1');
$output = shell_exec($command); 
echo $output;
?>

执行后就能看到脚本执行失败的具体原因,比如找不到浏览器、权限不足等。

2. 使用Python绝对路径

命令行的python3可能和PHP调用的不是同一个环境,先在命令行执行which python3获取绝对路径(比如/usr/bin/python3),替换到PHP代码中:

$command = escapeshellcmd('/usr/bin/python3 test.py 2>&1');

3. 为PHP运行用户安装Playwright浏览器

你在命令行安装的Playwright浏览器仅对当前登录用户可见,PHP运行用户无法访问。执行以下命令,为PHP用户(以www-data为例)安装浏览器:

sudo -u www-data /usr/bin/python3 -m playwright install chromium

如果不知道PHP运行用户,可在PHP脚本中添加echo exec('whoami');查看。

4. 调整Playwright启动参数

服务器环境通常没有图形化沙箱,需在Python脚本中添加--no-sandbox参数,必要时可指定浏览器绝对路径:

from playwright.sync_api import Playwright, sync_playwright, expect

def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(
        headless=True,
        args=["--no-sandbox"],
        # executable_path="/usr/bin/chromium-browser" # 可根据实际路径添加
    )
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://inzamelhelden.nl/beheer/rapportageplus.php")
    context.close() # 建议先关闭context再关闭browser
    browser.close()

with sync_playwright() as playwright:
        run(playwright)

5. 检查文件与目录权限

确保test.py所在目录及文件本身对PHP运行用户有读取、执行权限:

chown www-data:www-data /path/to/your/test.py
chmod 755 /path/to/your/test.py

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:22:25