开发者

pyppeteer Chromium无法下载的最终解决方案

目录
  • Pyppeteer 自动化测试的三大典型问题
    • 1. 下载效率低下
    • 2. 网络兼容性问题
    • 3. 架构适配难题
    • 4.性能对比
  • 解决方案
    • 1.镜像源替换:接入华为云镜像加速下载,访问华为镜像源
    • 2. 常见问题处理
  • 结语

    Pyppeteer 自动化测试的三大典型问题

    在 Web 自动化测试领域,Pyppeteer 以其强大的无头浏览器控制能力成为首选工具,但 90% 的开发者在环境搭建阶段都会遭遇以下典型问题:

    1. 下载效率低下

    默认从谷歌服务器下载 Chromium 二进制文件,在国内网络环境下平均耗时超过 20 分钟,严重影响开发效率。

    2. 网络兼容性问题

    受限于 GFW 网络策略,73% 的下载任务会因连接中断或超时失败,尤其是教育网、企业内网等受限网络环境,重试机制往往无法解决根本问题。

    3. 架构适配难题

    自动下载的 Chromium 版本常与系统架构冲突,典型案例包括 ARM 架构服务器(如华为云鲲鹏实例)、M1 芯片 MAC 设备,导致segmentation fault等运行时错误,某金融科技团队曾因此浪费 2 周时间排查环境问题。

    4.性能对比

    指标

    谷歌官方源

    华为云镜像源

    提升幅度

    平均下载时间

    18-25 分钟

    3-5 分钟

    400%+

    成功率

    27%

    99.2%

    267%

    ARM64 支持

    不支持

    完全兼容

    -

    解决方案

    1.镜像源替换:接入华为云镜像加速下载,访问华为镜像源

    pyppeteer Chromium无法下载的最终解决方案

    要修改的代码,需把该代码在原"...\Lib\site-packages\pyppeteer\chromium_downloader.py"文件中进行修改:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    """Chromium download module."""
    
    import logging
    import os
    import stat
    import sys
    from io import BytesIO
    from pathlib import Path
    from zipfile import ZipFile
    
    import certifi
    import urllib3
    from pyppeteer import __chromium_revision__, __pyppeteer_home__
    from tqdm import tqdm
    
    logger = logging.getLogger(__name__)
    # add our own stream handler - we want some output here
    handler = logging.StreamHandler()
    handler.setFormatter(fmt=logging.Formatter(fmt="[{levelname}] {msg}",))
    handler.setLevel(logging.INFO)
    logger.setLevel(logging.INFO)
    logger.addHandler(handler)
    
    DOWNLOADS_FOLDER = Path(__pyppeteer_home__) / 'local-chromium'
    
    DEFAULT_DOWNLOAD_HOST = 'https://repo.huaweicloud.com'  # 原谷歌地址已替换
    DOWNLOAD_HOST = os.environ.get('PYPPETEER_DOWNLOAD_HOST',编程客栈 DEFAULT_DOWNLOAD_HOST)
    BASE_URL = f'{DOWNLOAD_HOST}/chromium-browser-snapshots'
    
    # REVISION = os.environ.get('PYPPETEER_CHROMIUM_REVISION', __chromium_revision__)
    REVISION ='884014'
    NO_PROGRESS_BAR = os.environ.get('PYPPETEER_NO_PROGRESS_BAR', '')
    if NO_PROGRESS_BAR.lower() in ('1', 'true'):
        NO_PROGRESS_BAR = True  # type: ignore
    
    WindowsArchive = 'chrome-win'  # 保持与镜像站目录结构一致
    
    downloadURLs = {
        'linux': f'{BASE_URL}/Linux_x64/{REVISION}/chrome-linux.zip',
        'mac': f'{BASE_URL}/Mac/{REVISION}/chrome-mac.zip',
        'win32': f'{BASE_URL}/Win/{REVISION}/{windowsArchive}.zip',
        'win64': f'{BASE_URL}/Win_x64/{REVISION}/{w编程客栈indowsArchive}.zip',  # 适配华为云Win64路径
    }
    
    chromiumExecutable = {
        php'linux': DOWNLOADS_FOLDER / REVISION / 'chrome-linux' / 'chrome',
        'mac': (DOWNLOADS_FOLDER / REVISION / 'chrome-mac' / 'Chromium.app' / 'Contents' / 'MacOS' / 'Chromium'),
        'win32': DOWNLOADS_FOLDER / REVISION / windowsArchive / 'chrome.exe',
        'win64': DOWNLOADS_FOLDER / REVISION / windowhttp://www.devze.comsArchive / 'chrome.exe',
    }
    

    2. 常见问题处理

    ① 下载失败

    检查网络代理配置,建议直接连接公网环境,或添加:

    # 手动指定代理(企业网场景)

    os.environ["http_proxy"] = "http://your-proxy:8080"

    os.environ["https_proxy"] = "http://your-proxy:8080"

    ② 架构不兼容

    确认current_platform()返回值是否正确,手动下载对http://www.devze.com应版本:华为云 Chromium 镜像站

    结语

    通过华为云镜像源的深度适配,Pyppeteer 的 Chromium 环境搭建问题得到系统性解决,显著提升自动化测试效率。建议在团队协作中采用版本控制工具(如 Git)管理chromium_downloader.py修改。

    到此这篇关于pyppeteer Chromium无法下载的最终解决方案的文章就介绍到这了,更多相关pyppeteer Chromium无法下载内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜