在自己账户测试没问题,应用分享给别人使用的时候就不行了,很快提示报错
[错误来源]
行2: 检查并安装Playwright及Chromium浏览器
行104: raise RuntimeError(f"Chromium 安装失败: {output}")
执行 raise RuntimeError(f"Chromium 安装失败: {output}") 时出错: Chromium 安装失败: 命令失败 (退出码 1),,,\ShadowBot\shadowbot-5.31.34\python\python.exe: No module named playwright
我自己的账户手动删除了playwright模块,再次运行以下代码都是正常
以下是代码片段,在魔法指令中运行
# 使用此指令前,请确保安装必要的Python库,例如使用以下命令安装:
# pip install playwright
import subprocess
import sys
import time
import os
import traceback
from typing import *
try:
from xbot.app.logging import trace as print
except:
from xbot import print
def check_and_install_playwright():
"""
title: 检查并安装Playwright及Chromium浏览器
description: 检查 `playwright` 是否安装,未安装则自动安装。已安装则检查 `chromium` 浏览器是否可用,未安装则执行安装命令。
inputs: None
outputs:
- status (str): 安装状态信息,eg: "playwright和chromium已成功安装"
"""
try:
from xbot.app.logging import trace as print
except ImportError:
pass
def _check_package_installed(package_name: str) -> bool:
try:
__import__(package_name)
print(f"[DEBUG] 包 {package_name} 已成功导入")
return True
except ImportError as e:
print(f"[DEBUG] 包 {package_name} 未安装: {e}")
return False
def _run_command(command: list, shell=False) -> tuple:
cmd_str = ' '.join(command) if isinstance(command, list) else command
print(f"[DEBUG] 正在执行命令: {cmd_str}")
try:
result = subprocess.run(
command,
shell=shell,
capture_output=True,
text=True,
check=True,
env=os.environ.copy()
)
print(f"[DEBUG] 命令执行成功:\n{result.stdout}")
return True, result.stdout
except subprocess.CalledProcessError as e:
error_msg = f"命令失败 (退出码 {e.returncode})\nSTDOUT:\n{e.stdout}\nSTDERR:\n{e.stderr}"
print(f"[DEBUG] 命令执行失败:\n{error_msg}")
return False, error_msg
except Exception as e:
error_msg = f"执行命令时发生异常: {e}\n{traceback.format_exc()}"
print(f"[DEBUG] 命令执行异常:\n{error_msg}")
return False, error_msg
def _check_chromium_installed() -> bool:
try:
from playwright.sync_api import sync_playwright
print("[DEBUG] 正在尝试启动 Chromium 进行验证...")
with sync_playwright() as p:
browser = p.chromium.launch(headless=True, timeout=30000)
browser.close()
print("[DEBUG] Chromium 验证成功")
return True
except Exception as e:
print(f"[DEBUG] Chromium 启动失败: {e}")
return False
# =================== 第一步:安装 playwright 包(使用清华源) ===================
if not _check_package_installed("playwright"):
print("检测到 playwright 未安装,正在通过 pip + 清华源安装...")
success, output = _run_command([
sys.executable, "-m", "pip", "install", "playwright",
"-i", "https://pypi.tuna.tsinghua.edu.cn/simple",
"--trusted-host", "pypi.tuna.tsinghua.edu.cn"
])
if not success:
raise RuntimeError(f"playwright 安装失败: {output}")
print("playwright 安装完成")
time.sleep(2)
if not _check_package_installed("playwright"):
raise RuntimeError("playwright 安装后仍无法导入,请检查 Python 环境")
else:
print("playwright 已安装")
# =================== 第二步:设置浏览器二进制镜像(使用 npmmirror 正确地址) ===================
os.environ["PLAYWRIGHT_DOWNLOAD_HOST"] = "https://playwright.npmmirror.com"
print("[INFO] 已设置 Playwright 浏览器二进制镜像源: https://playwright.npmmirror.com")
# =================== 第三步:安装 Chromium 浏览器 ===================
if not _check_chromium_installed():
print("检测到 Chromium 未安装,正在通过 playwright CLI 安装...")
success, output = _run_command([sys.executable, "-m", "playwright", "install", "chromium"])
if not success:
raise RuntimeError(f"Chromium 安装失败: {output}")
print("Chromium 安装完成")
time.sleep(3)
if not _check_chromium_installed():
raise RuntimeError("Chromium 安装完成但无法启动,请检查环境或权限")
else:
print("Chromium 已安装")
return "playwright和chromium已成功安装并可正常使用"