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

Playwright Python教程:基础篇

文章目录

        • **目标读者**
        • **一、Playwright 是什么?为什么选择它?**
        • **二、核心概念:Browser, Context, Page**
        • **三、环境安装与 setup**
        • **四、第一个示例脚本:打开网页并截图**
        • **五、基本交互:点击与输入**
        • **六、定位元素与选择器**
        • **七、断言:验证结果**
        • **基础篇总结与下一步**

目标读者

本教程面向从未接触过 Playwright 或刚刚起步的自动化测试开发者。我们将从最核心的概念讲起,确保你能牢固地打下基础。


一、Playwright 是什么?为什么选择它?

1. 是什么?
Playwright 是一个用于 Web 测试和自动化的开源库。它提供了一个高级 API 来控制 ChromiumFirefoxWebKit 浏览器,让你能够以编程方式模拟用户操作,如点击、输入、导航等,从而进行自动化测试或网页抓取。

2. 为什么选择它?(对比 Selenium)

  • 跨浏览器支持:原生支持所有现代浏览器,包括 WebKit(Safari 的引擎)。
  • 速度快、更可靠:自动等待元素出现、网络请求完成等,减少了编写 time.sleep() 的需要,测试更加稳定。
  • 强大的自动化能力:可以模拟移动设备、地理定位、权限等复杂场景;轻松处理 iframe 和多个页面(Tab)。
  • 自动录制工具:内置代码生成器,可以录制你的操作并生成对应代码,对初学者极其友好。
特性PlaywrightSelenium优势方
架构与速度WebSocket,速度快HTTP,速度慢Playwright
自动等待内置智能等待,稳定需大量编写显式等待,脆弱Playwright
选择器引擎强大(文本、CSS、React/Vue)标准(CSS, XPath)Playwright
多会话支持Browser Context,轻量隔离需启动多实例,重量级Playwright
网络控制强大,可拦截、Mock、修改非常有限Playwright
移动端测试优秀模拟(设备、视口、触摸)依赖 Appium,配置复杂Playwright (模拟)
录制功能内置,生成代码质量高依赖 IDE,代码质量一般Playwright
学习曲线低至中,API 设计现代中,概念较多且旧Playwright
社区与生态快速增长,但较新极其庞大和成熟,资源丰富Selenium
语言支持JS/TS, Python, Java, .NET几乎所有语言Selenium
云服务集成所有主流云服务均支持所有云服务都原生支持平手

二、核心概念:Browser, Context, Page

理解这三个核心概念是学好 Playwright 的关键。它们的关系就像浏览器 -> 用户会话 -> 标签页

  1. Browser

    • 代表一个浏览器实例。你可以把它想象成你电脑上安装的 Chrome 或 Firefox 程序。
    • 通常由一个 browser_type(如 chromium)启动。启动它是比较耗资源的操作。
  2. Context

    • 浏览器上下文。这是一个非常重要的概念,它类似于一个独立的匿名会话窗口(Incognito Window)。
    • 每个 Context 相互隔离,它们之间不共享 cookies、缓存和本地存储。这非常有用,你可以用它来模拟多个用户同时登录同一个网站。
    • 一个 Browser 可以创建多个 Context。
  3. Page

    • 代表一个标签页(Tab)或一个弹出窗口。
    • 你的大部分操作(如点击链接、填写表单)都将在一个 Page 上完成。
    • 一个 Context 可以拥有多个 Page。

关系总结
一个 Browser -> 多个 Context -> 多个 Page


三、环境安装与 setup
  1. 安装 Playwright Python 库

    pip install pytest-playwright
    

    推荐使用 pytest-playwright,它包含了运行测试所需的库。

  2. 安装浏览器驱动(Chromium, Firefox, WebKit)

    playwright install
    

    这条命令会下载所有支持的浏览器,以便 Playwright 可以使用它们。


四、第一个示例脚本:打开网页并截图

让我们编写一个最简单的脚本,感受一下 Playwright 的工作流程。

# 1. 导入同步的 Playwright API
from playwright.sync_api import sync_playwright# 2. 使用 sync_playwright 管理器
with sync_playwright() as p:# 3. 启动一个 Chromium 浏览器实例 (headless 模式,即无界面)browser = p.chromium.launch(headless=False) # 设置为 False 可以看到浏览器操作# 4. 创建一个浏览器上下文context = browser.new_context()# 5. 在上下文中创建一个新的页面/标签页page = context.new_page()# 6. 让页面导航到指定的 URLpage.goto('https://example.com')# 7. 对页面进行截图并保存page.screenshot(path='example.png')# 8. 打印当前页面的标题print(page.title())# 9. 关闭浏览器browser.close()

逐行解释

  1. 导入同步模式的 API。Playwright 也支持异步(async_api),但同步模式对初学者更友好。
  2. sync_playwright() 是一个上下文管理器,它负责启动和停止 Playwright。
  3. 使用 chromium 浏览器类型来启动浏览器。launch(headless=False) 表示以有界面模式启动,方便调试。默认是 True(无头模式)。
  4. 创建一个新的、独立的浏览器上下文。
  5. 在上下文中创建一个新的页面(就像打开了一个新标签页)。
  6. 命令页面跳转到 https://example.com
  7. 对当前页面进行截图,并保存为 example.png
  8. 在控制台打印页面的标题(<title> 标签的内容)。
  9. 最后,关闭浏览器,释放资源。

运行这个脚本,你会看到浏览器打开,访问 example.com,然后自动关闭,并在你的项目目录下生成一张 example.png 的截图。


五、基本交互:点击与输入

自动化测试的核心是模拟用户交互。最常见的就是点击输入文本

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False)context = browser.new_context()page = context.new_page()# 导航到 Playwright 官方文档搜索页page.goto('https://playwright.dev/python/docs/intro')# 1. 点击搜索框# 使用 CSS 选择器 ‘.DocSearch-Button’ 来定位元素page.click('.DocSearch-Button')# 2. 在搜索框中输入文本 ‘python’# 使用 CSS 选择器 ‘.DocSearch-Input’ 来定位元素page.fill('.DocSearch-Input', 'python')# 为了演示,我们等待一下,然后截图看看效果page.wait_for_timeout(3000) # 等待 3 秒(单位:毫秒)page.screenshot(path='search.png')browser.close()
  • page.click(selector):点击一个元素。你需要提供一个 选择器(如 CSS 选择器)来告诉 Playwright 要点击哪个元素。
  • page.fill(selector, value):在输入框内填充文本。它会先清空输入框,再输入文本。
  • page.wait_for_timeout(timeout):强制等待指定的毫秒数。应尽量避免使用,最好用 page.wait_for_selector 或其他智能等待方法。这里只是为了演示暂停。

六、定位元素与选择器

要与元素交互,首先必须找到它。Playwright 支持多种选择器:

  • CSS 选择器:最常用,如 button.submit, #login-btn
  • 文本选择器:通过文本内容定位,如 page.click(‘text=Login’)
  • XPathpage.click(‘//button’)

最佳实践:使用录制工具生成选择器
对于初学者,手动写选择器可能很困难。Playwright 内置了代码生成器,可以帮你!

  1. 在终端运行:
    playwright codegen https://example.com
    
  2. 这会打开一个浏览器和一个代码录制窗口。
  3. 你在浏览器里的所有操作都会被实时转换成代码,并显示在窗口中。
  4. 你可以直接复制这些代码到你的脚本中使用。

七、断言:验证结果

测试离不开断言。Playwright 推荐使用 Python 标准的 assert 语句,因为它简单直接。

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False)page = browser.new_page() # 简便写法,相当于 new_context().new_page()page.goto('https://example.com')# 断言:页面的标题是 ‘Example Domain’assert page.title() == 'Example Domain'# 定位一个元素(<h1>标签),并断言其文本内容heading_element = page.query_selector('h1')assert heading_elementassert heading_element.text_content() == 'Example Domain'print(‘测试通过!’)browser.close()
  • page.title():获取页面标题。
  • page.query_selector(selector):查找一个匹配选择器的元素,返回 ElementHandle 对象,如果没找到则返回 None
  • element.text_content():获取元素的文本内容。

基础篇总结与下一步

恭喜!你已经掌握了 Playwright 最基础也是最重要的概念:

  1. 理解了 Browser, Context, Page 的关系。
  2. 学会了如何搭建环境编写第一个脚本
  3. 学会了基本交互goto, click, fill
  4. 知道了如何用选择器定位元素和用 assert 进行验证。
  5. 知道了 playwright codegen 这个强大的录制工具。

下一步(中级篇预览)
在中级篇中,我们将深入更实用的主题:

  • 高级等待策略page.wait_for_selector, page.wait_for_function,告别 time.sleep
  • 处理下拉框、对话框(Alert)、文件上传等复杂组件。
  • 处理 Frame 和 Iframe
  • 管理多个 Page 和 Tab
  • 模拟键盘和鼠标高级事件
http://www.dtcms.com/a/359412.html

相关文章:

  • 秋招笔记-8.31
  • 在集群级别应用 Pod 安全标准
  • 【MySQL】练习12-4:启用GTID并配置循环复制
  • Conda相关的用法
  • 人工智能之数学基础:连续型随机变量
  • Langflow 评估与迭代技术深度分析
  • 3DES加解密的算法Java Python Golang
  • 【大模型面试宝典之微调篇】(一)
  • 算法之链表
  • Windows中如何将Docker安装在E盘并将Docker的镜像和容器存储在E盘的安装目录下
  • 四数之和的一些判断怎么记忆
  • 《哲思:生命与宇宙的终极意义》
  • 分治思想与分治算法的区别
  • C6.7:输入电阻的负载效应及其CE负反馈放大器
  • 【线性代数基础 | 那忘算9】基尔霍夫(拉普拉斯)矩阵 矩阵—树定理证明 [详细推导]
  • ICode总线原理
  • Playwright Python 教程:高级篇
  • JDK 22 Windows 64位安装教程(含环境变量配置+验证步骤+附安装包下载)
  • Qwen3_moe模型代码解析
  • 数据结构与算法:线段树(三):维护更多信息
  • 运筹说 第141期 | 启发式算法:用简单规则、破解复杂问题
  • WEB漏洞挖掘篇(一) 基本概念、十大常見WEB漏洞
  • 自底向上了解CPU的运算
  • Google 的 Agent2Agent 协议 (A2A):带示例的指南
  • 「日拱一码」068 机器学习——迁移学习TL
  • SIEPIC工具和PDK安装
  • C#语言入门详解(17)字段、属性、索引器、常量
  • 云计算与服务器
  • 【C#】在一个任意旋转的矩形(由四个顶点定义)内绘制一个内切椭圆
  • 在AlmaLinux或CentOS 8上编译安装ZLMediaKit流媒体服务器