当前位置: 首页 > news >正文

深入解析Playwright for Python:浏览器功能与代码实例详解

深入解析Playwright for Python:浏览器功能与代码实例详解

摘要:本文深入讲解Playwright for Python中浏览器相关功能的技术要点,包含安装、配置、运行测试及管理浏览器二进制文件,同时提供完整的代码实例,助你高效掌握Playwright在Python环境中的应用。

引言

在现代Web应用测试领域,Playwright for Python凭借其跨浏览器支持、自动化等待机制等特性脱颖而出。本文将深入探讨Playwright for Python中浏览器相关功能的核心技术要点,结合实际代码示例,助力开发者高效利用这一工具进行Web应用测试。

Playwright浏览器安装与管理

概述

Playwright的每个版本都依赖特定版本的浏览器二进制文件。这保证了测试环境的稳定性和兼容性。通过Playwright CLI,我们可以轻松安装和管理这些浏览器。

安装浏览器

  • 默认安装:运行playwright install命令可以安装默认浏览器,包括Chromium、WebKit和Firefox。
  • 指定浏览器安装:使用playwright install webkit等命令可安装特定浏览器。
  • 查看支持浏览器playwright install --help命令展示所有支持的浏览器选项。

系统依赖安装

  • 自动安装playwright install-deps命令在CI等环境中自动安装系统依赖。
  • 指定浏览器依赖playwright install-deps chromium仅安装Chromium依赖。
  • 组合命令playwright install --with-deps chromium同时安装浏览器和系统依赖。

配置浏览器

Playwright支持Chromium、WebKit、Firefox等主流渲染引擎,以及Google Chrome、Microsoft Edge等品牌浏览器。通过--browser参数可以指定在不同浏览器上运行测试,如pytest test_login.py --browser webkit。此外,使用--device参数可模拟移动设备,例如pytest test_login.py --device="iPhone 13"

浏览器功能详解与实例

Chromium支持

Playwright使用开源Chromium构建版本,领先于品牌浏览器版本。提供常规Chromium构建用于有头操作,以及无头外壳用于无头模式。在CI环境下,可通过--only-shell参数仅安装无头外壳,减少资源占用。新的无头模式提供更真实可靠的测试环境,适合高精度测试场景。

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(channel="msedge")  # 使用msedge通道page = browser.new_page()page.goto("https://playwright.dev")print(page.title())  # 打印页面标题browser.close()

Google Chrome和Microsoft Edge

Playwright支持操作本地安装的品牌浏览器,如Google Chrome和Microsoft Edge。需指定通道参数,例如channel="chrome"channel="msedge"。支持Stable和Beta通道,可通过Playwright CLI安装。

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(channel="chrome")  # 使用本地Chrome浏览器page = browser.new_page()page.goto("https://example.com")print(page.title())browser.close()

Firefox与WebKit

Playwright的Firefox版本基于最新Stable构建,与品牌版本不兼容。WebKit则从最新主线分支源代码派生,不支持Safari品牌版本。不同操作系统上功能可用性可能有所不同。

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.firefox.launch()  # 启动Firefox浏览器page = browser.new_page()page.goto("https://example.com")print(page.title())browser.close()
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.webkit.launch()  # 启动WebKit浏览器page = browser.new_page()page.goto("https://example.com")print(page.title())browser.close()

在防火墙或代理环境安装

Playwright默认从Microsoft CDN下载浏览器,可通过配置代理服务器解决内部网络限制。使用NODE_EXTRA_CA_CERTS环境变量设置自定义根证书,解决证书问题。通过PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT环境变量增加连接超时时间。

浏览器二进制文件管理

Playwright将浏览器下载到操作系统特定的缓存文件夹。可通过环境变量PLAYWRIGHT_BROWSERS_PATH指定下载位置。Playwright会自动移除陈旧浏览器版本,节省磁盘空间。也可通过playwright uninstall命令手动卸载浏览器。

import os
from playwright.sync_api import sync_playwright# 设置浏览器下载路径
os.environ["PLAYWRIGHT_BROWSERS_PATH"] = "$HOME/pw-browsers"with sync_playwright() as p:browser = p.chromium.launch()page = browser.new_page()page.goto("https://example.com")print(page.title())browser.close()

Chrome扩展支持

Playwright允许在Chrome/Chromium中使用持久上下文加载扩展。需指定扩展路径,使用--disable-extensions-except--load-extension参数。支持无头和有头模式。

from playwright.sync_api import sync_playwright, Playwrightpath_to_extension = "./my-extension"
user_data_dir = "/tmp/test-user-data-dir"def run(playwright: Playwright):context = playwright.chromium.launch_persistent_context(user_data_dir,channel="chromium",args=[f"--disable-extensions-except={path_to_extension}",f"--load-extension={path_to_extension}",],)if len(context.background_pages) == 0:background_page = context.wait_for_event('backgroundpage')else:background_page = context.background_pages[0]context.close()with sync_playwright() as playwright:run(playwright)

测试夹具与用例

通过测试夹具加载扩展,动态获取扩展ID,用于测试弹出页面等。以下为测试夹具和用例示例:

# conftest.py
from typing import Generator
from pathlib import Path
from playwright.sync_api import Playwright, BrowserContext
import pytest@pytest.fixture()
def context(playwright: Playwright) -> Generator[BrowserContext, None, None]:path_to_extension = Path(__file__).parent.joinpath("my-extension")context = playwright.chromium.launch_persistent_context("",channel="chromium",args=[f"--disable-extensions-except={path_to_extension}",f"--load-extension={path_to_extension}",],)yield contextcontext.close()@pytest.fixture()
def extension_id(context) -> Generator[str, None, None]:background = context.service_workers[0]if not background:background = context.wait_for_event("serviceworker")extension_id = background.url.split("/")[2]yield extension_id
# test_foo.py
from playwright.sync_api import expect, Pagedef test_example_test(page: Page) -> None:page.goto("https://example.com")expect(page.locator("body")).to_contain_text("Changed by my-extension")def test_popup_page(page: Page, extension_id: str) -> None:page.goto(f"chrome-extension://{extension_id}/popup.html")expect(page.locator("body")).to_have_text("my-extension popup")

总结

Playwright for Python提供了强大的浏览器功能支持,涵盖多浏览器兼容性、扩展支持、灵活的安装与管理选项。通过本文的深入解析和代码示例,开发者可以更高效地利用Playwright进行Web应用测试,确保应用在不同浏览器环境下的稳定性和可靠性。

进一步学习资源

  • Playwright官方文档
  • Playwright Python API参考
  • Playwright培训与视频教程
  • Playwright社区支持
http://www.lqws.cn/news/101107.html

相关文章:

  • Python数据可视化科技图表绘制系列教程(一)
  • 用python制作一个消消乐游戏(限时关卡挑战版)
  • 机器学习——聚类算法
  • Dify:用Celery构建高性能异步任务处理系统
  • 力扣刷题Day 69:搜索二维矩阵(74)
  • LabelMe安装踩坑
  • Numpy入门1——创建、数据类型、属性、和列表的差异
  • Rust 学习笔记:使用自定义命令扩展 Cargo
  • 转战海外 Web3 远程工作指南
  • ARM GIC V3概述
  • 无人机论文感想
  • React进阶:状态管理选择题
  • python学习(一)
  • 提升系统稳定性和可靠性的特殊线程(看门狗线程)
  • git管理github上的repository
  • STM32外部中断(EXTI)以及旋转编码器的简介
  • iOS 电子书听书功能的实现
  • Java中并发修改异常如何处理
  • React 第五十二节 Router中 useResolvedPath使用详解和注意事项示例
  • 高效易用的 MAC 版 SVN 客户端:macSvn 使用体验
  • C# winform教程(二)----button
  • 行列式详解:从定义到应用
  • C# CallerMemberName特性
  • macos常见且应该避免被覆盖的系统环境变量(避免用 USERNAME 作为你的自定义变量名)
  • 6.3 day 35
  • 【iOS】多线程基础
  • iptables常用命令
  • 014校园管理系统技术解析:构建智慧校园管理平台
  • Cursor + Claude 4:微信小程序流量主变现开发实战案例
  • 【notepad++】如何设置notepad++背景颜色?