首页 > 其他分享 >Playwright 国内安装加速指南:更换源并测试安装

Playwright 国内安装加速指南:更换源并测试安装

时间:2025-01-20 15:57:40浏览次数:3  
标签:指南 playwright 浏览器 Playwright directory path 安装

原文链接:Playwright 国内安装加速指南
作者:KTO

Playwright 国内安装加速指南:更换源并测试安装

引言

Playwright 是一个强大的自动化测试工具,支持多种浏览器(如 Chrome、Firefox、WebKit)的自动化操作。然而,对于国内用户来说,安装 Playwright 时可能会遇到下载速度慢的问题,尤其是在安装浏览器(如 Chrome)时。虽然可以通过更换清华源来加速 Python 包的安装,但 Playwright 安装浏览器时的源更换方式有所不同。本文将介绍如何通过脚本更换国内源,并提供一个测试脚本来验证 Playwright 是否安装成功。

1. Playwright 安装慢的原因

Playwright 在安装过程中需要下载浏览器二进制文件,这些文件通常托管在国外的服务器上,导致国内用户下载速度较慢。虽然可以通过更换 Python 包的源来加速 Playwright 本身的安装,但浏览器二进制文件的下载源并不受此影响。

2. 更换国内源加速安装

为了加速 Playwright 的安装,我们可以通过设置环境变量来指定浏览器二进制文件的下载源。以下是一个安装脚本,可以帮助你更换为国内源并加速安装。

安装脚本

见附录安装脚本

安装脚本说明

  1. 安装 Playwright:使用清华大学的 PyPI 镜像源安装 Playwright,确保 Python 包的下载速度。
  2. 修改 CDN 镜像配置:通过正则表达式查找并替换 Playwright 的 CDN 镜像配置,将其替换为国内镜像(如 https://registry.npmmirror.com/-/binary/playwright),从而加速浏览器二进制文件的下载。
  3. 安装 Chromium:执行 playwright install chromium 安装 Chromium 浏览器。

脚本功能详解

  • install_playwright 函数:使用清华源安装 Playwright 库。
  • read_and_modify_file 函数:递归查找 Playwright 的配置文件 index.js,并将其中的 CDN 镜像替换为国内镜像。
  • install_chromium 函数:安装 Playwright 所需的 Chromium 浏览器。
  • 错误处理:脚本中包含了错误处理逻辑,确保在安装或修改过程中出现问题时能够及时反馈。

3. 测试 Playwright 安装

为了验证 Playwright 是否安装成功,我们可以编写一个简单的测试脚本。

测试脚本

见附录测试脚本

测试脚本说明

  1. 导入模块:导入 playwright.sync_api 模块。
  2. 启动浏览器:使用 p.chromium.launch() 启动 Chromium 浏览器。
  3. 打开百度并搜索:访问百度首页,输入搜索关键词并提交搜索请求。
  4. 等待并验证结果:等待搜索结果加载,并检查是否成功找到搜索结果。
  5. 关闭浏览器:使用 browser.close() 关闭浏览器。

如果脚本正常运行并打印出“调试成功:已找到搜索结果。”,说明 Playwright 安装成功。

4. 总结

通过更换国内源,我们可以显著加速 Playwright 及其浏览器的安装过程。本文提供的安装脚本和测试脚本可以帮助国内用户更轻松地完成 Playwright 的安装和验证。希望这篇博客对你有所帮助,如果你有任何问题或建议,欢迎在评论区留言。


注意:本文提供的脚本和方法适用于大多数情况,但由于网络环境的复杂性,可能会遇到个别问题。如果遇到问题,请参考 Playwright 官方文档或社区支持。

附录

安装脚本代码

# -*- coding: utf-8 -*-
import os
import re
import subprocess
import sys

'''
原始镜像备份
const PLAYWRIGHT_CDN_MIRRORS = ['https://playwright.azureedge.net', 'https://playwright-akamai.azureedge.net', 'https://playwright-verizon.azureedge.net'];
'''

def install_playwright():
    """
    安装 Playwright 库。
    使用清华大学的 PyPI 镜像源进行安装。
    """
    try:
        subprocess.check_call(
            [sys.executable, "-m", "pip", "install", "playwright", "-i", "https://pypi.tuna.tsinghua.edu.cn/simple"])
    except subprocess.CalledProcessError as e:
        handle_error(f"安装过程中出现错误: {e}")
    except Exception as e:
        handle_error(f"发生了一个意外错误: {e}")

def install_chromium():
    """
    安装 Playwright 的 Chromium 浏览器。
    """
    try:
        subprocess.check_call([sys.executable, "-m", "playwright", "install", "chromium"])
    except subprocess.CalledProcessError as e:
        handle_error(f"安装过程中出现错误: {e}")
    except Exception as e:
        handle_error(f"发生了一个意外错误: {e}")

def handle_error(message):
    """
    处理错误并打印错误信息。
    可以在这里添加其他错误处理逻辑,比如发送通知、记录日志等。

    :param message: 错误信息
    """
    print(message)

def find_specific_directory(start_path, target_directory):
    """
    从起始路径递归查找特定名称的目录。

    :param start_path: 起始查找的目录路径
    :param target_directory: 要查找的目录名称
    :return: 符合条件的目录路径列表
    """
    matched_directories = []

    for root, dirs, files in os.walk(start_path):
        for dir_name in dirs:
            full_path = os.path.join(root, dir_name)
            if full_path.endswith(target_directory):
                matched_directories.append(full_path)

    return matched_directories

def read_and_modify_file():
    """
    读取并修改 Playwright 的 CDN 镜像配置文件。
    """
    # 获取当前Python可执行文件所在的目录
    directory = os.path.dirname(sys.executable)
    # 获取上一级目录
    parent_directory = os.path.dirname(directory)

    target_directory = r'playwright\driver\package\lib\server\registry'
    matched_dirs = find_specific_directory(parent_directory, target_directory)

    if not matched_dirs:
        print(f"未找到目录: {target_directory}")
        return

    if len(matched_dirs) > 1:
        print(f"找到多个匹配的目录: {matched_dirs}")
        return

    directory = matched_dirs[0]
    # 定义 index.js 文件的路径
    index_js_path = os.path.join(directory, 'index.js')

    # 检查文件是否存在
    if not os.path.exists(index_js_path):
        print(f"未找到文件: {index_js_path}")
        return

    try:
        # 打开并读取文件内容
        with open(index_js_path, 'r', encoding='utf-8') as file:
            content = file.read()

        # 定义要匹配的模式
        pattern = r"const PLAYWRIGHT_CDN_MIRRORS = \['https://[^']+?(?:', 'https://[^']+?)*'\];"
        # 使用正则表达式查找匹配的字符串
        match = re.search(pattern, content)

        # 如果未找到匹配的字符串,直接返回
        if not match:
            print("未找到匹配的字符串")
            return

        # 打印找到的原始镜像
        print("找到原始镜像:")
        print(match.group())

        # 替换匹配到的字符串
        new_content = re.sub(pattern,
                             "const PLAYWRIGHT_CDN_MIRRORS = ['https://registry.npmmirror.com/-/binary/playwright'];",
                             content)
        # 打印替换后的镜像
        print("替换后的镜像:")
        match2 = re.search(pattern, new_content)
        print(match2.group())

        # 将修改后的内容写回文件
        with open(index_js_path, 'w', encoding='utf-8') as file:
            file.write(new_content)

    except Exception as e:
        handle_error(f"读取文件时出错: {e}")

if __name__ == "__main__":
    """
    主函数入口。
    依次执行安装 Playwright、读取并修改配置文件、安装 Chromium 的操作。
    """
    # 安装 Playwright
    install_playwright()
    # 读取并修改 Playwright 的 CDN 镜像配置文件
    read_and_modify_file()
    # 安装 Chromium
    install_chromium()

测试脚本代码

from playwright.sync_api import sync_playwright

def list_baidu_search_results(search_keyword):
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        page = browser.new_page()
        page.goto("https://www.baidu.com/")
        # 输入搜索关键词
        page.fill('input[name="wd"]', search_keyword)
        page.press('input[name="wd"]', "Enter")

        # 等待搜索结果加载
        page.wait_for_timeout(3000)  # 等待3秒以确保页面加载完成
        page.wait_for_selector(".result")

        # 列出搜索结果
        results = page.query_selector_all(".result")
        if results:
            print("调试成功:已找到搜索结果。")
        else:
            print("调试失败:未找到搜索结果。")

        browser.close()

# 示例调用,传递搜索关键词
search_keyword = "www.ktovoz.com"
list_baidu_search_results(search_keyword)

标签:指南,playwright,浏览器,Playwright,directory,path,安装
From: https://blog.csdn.net/Ktovoz/article/details/145262343

相关文章

  • Python Playwright学习笔记(二)
    一、模拟手机playwright.devices可以配置模拟器。importasynciofromplaywright.async_apiimportasync_playwrightasyncdefrun(playwright):iphone_12=playwright.devices['iPhone12']browser=awaitplaywright.webkit.launch(headless=False)conte......
  • 迅为RK3568开发板SPI驱动指南-mcp2515驱动编写:读寄存器函数
    瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和MaliG522EE图形处理器。RK3568支持4K解码和1080P编码,支持SATA/PCIE/USB3.0外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568支持安卓11和linux系统,主要面向......
  • wordpress安装完后台无格式解决方法(样式加载不出来)
     刚安装的wordpress,进入后台后,没有样式。1.如果ip进入,可能一切正常2.域名进入,遇到这种情况概率大(经过了nginx代理)正常访问文章的话是没问题的,只是管理后台存在这样的代码,样式没加载出来。美国随机地址生成器:美国随机地址生成器(随机地址生成器-生成全球真实地址),生成真实......
  • DBeaver 22.0 最新版下载及安装教程
    DBeaver简介DBeaver是一个通用的数据库管理工具和SQL客户端,支持MySQL,PostgreSQL,Oracle,DB2,MSSQL,Sybase,Mimer,HSQLDB,Derby,以及其他兼容JDBC的数据库。DBeaver提供一个图形界面用来查看数据库结构、执行SQL查询和脚本,浏览和导出数据,处理BLOB/CLOB数据,修......
  • K8s日志采集终极指南:Logtail + CRD实现多环境精准采集
    需求背景需求:k8s的应用日志解决方案,不同项目组的日志要采集到不同的logstore,并且只采集指定环境的日志(dev/test/prd)方案:logtail使用daemonset方式通过crd来自定义日志采集1.部署helmv3helm:https://github.com/helm/helm/releaseswgethttps://get.helm.sh/helm......
  • MySql操作指南7-数据验证与错误处理
    在使用Go语言访问MySQL数据库时,数据验证和错误处理是确保应用程序稳定性与数据完整性的核心环节。此外,日志管理对于问题追踪和系统调试具有重要作用。本文将介绍数据验证、错误处理以及日志记录与追踪的相关内容。通过这些技术,可以显著提高系统的健壮性和可维护性。 1、......
  • 2025版最新大模型微调指南,零基础入门到精通,收藏这篇就够了
    前言Prompt工程技术文章专栏系列已更新七章,涵盖了AI开发生态中的多种使用场景,并提供了足够实用的Prompt技巧。而现在,随着大模型调用变得越来越简单,tokens成本也大幅降低,AI开发者可以轻松进行API封装与二次开发。部分平台更是支持定制场景微调,推动着“AI+”模式在市场上蓬勃......
  • 如何修改网站模板结构:详细指南
    修改网站模板结构是提升网站设计和用户体验的重要步骤。以下是详细的修改步骤和注意事项,适用于各种类型的网站管理系统:备份网站文件:在进行任何文件修改之前,务必备份网站的所有文件和数据库。您可以使用FTP工具下载网站文件,或者通过网站托管商提供的备份功能进行备份。确保备......
  • 微擎程序安装后报错缺少ixed.5.6.win
    您好,针对您提到的微擎程序安装后报错缺少ixed.5.6.win的问题,我们进行了详细的分析。这个错误通常意味着您的PHP环境中缺少SourceGuardian解密器,而微擎程序依赖于该解密器来运行加密后的代码。为了解决这个问题,建议您按照以下步骤进行操作:下载并安装SourceGuardian解密器:首先,您......
  • seqtk 生信工具的安装与使用
     001、安装gitclonehttps://github.com/lh3/seqtk.gitcdseqtk/make./seqtk|head-n3  002、fastq格式转换为fasta格式[s20223040682@admin2test]$lstest.fastq[s20223040682@admin2test]$seqtkseq-atest.fastq>result.fa[s20223040682@admin2t......