影刀如何安装playwright,自己账户没问题,分享应用就不能使用
回答
收藏

影刀如何安装playwright,自己账户没问题,分享应用就不能使用

k
kemdon
2025-11-09 22:32·浏览量:591
k
kemdon
影刀高级开发者
发布于 2025-11-09 22:32591浏览

在自己账户测试没问题,应用分享给别人使用的时候就不行了,很快提示报错

[错误来源]

行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已成功安装并可正常使用"

收藏1
全部回答1
最新
发布回答
回答