文章目录
- 一、Playwright介绍
- 1.1 简单介绍
- 1.2 支持的平台
- 1.3 支持语言
- 1.4 官方文档(python)
- 二、开始
- 2.1 安装要求
- 2.2 安装
- 2.3 脚本录制
- 2.4 代码示例
一、Playwright介绍
1.1 简单介绍
Playwright是微软推出来的一款自动化测试工具,是专门为满足端到端测试需求而创建的。Playwright 支持所有现代渲染引擎,包括 Chromium、WebKit 和 Firefox。可以在 Windows、Linux 和 macOS 上进行本地或持续集成的测试,可以无头(headless)或有头(headed),还可以使用 Google Chrome 对 Android 和 Mobile Safari 进行本地模拟测试。
当今常用的三个自动化测试(或者爬虫)库:
库 | Selenium | Puppeteer | Playwright |
---|---|---|---|
JavaScript 支持 | 官方支持 | 官方支持 | 官方支持 |
Python 异步支持 | 无 | 第三方,而且 bug 不少 | 官方支持 |
Python 同步支持 | 官方支持 | 无 | 官方支持 |
维护者 | 社区 | 微软 | |
可操作性浏览器 | Chrome/Firefox/Safari/Edge | Chrome/Firefox | Chrome/Firefox/Safari/Edge |
模拟操作丰富度 | 一般 | 极好 | 很好 |
Cookie 支持 | 一般 | 一般 | API 非常友好 |
代理切换支持 | 一般 | 一般 | 极好 |
1.2 支持的平台
Linux | macOS | Windows | |
---|---|---|---|
Chromium 89.0.4344.0 | 支持 | 支持 | 支持 |
WebKit 14.1 | 支持 | 支持 | 支持 |
Firefox 84.0b9 | 支持 | 支持 | 支持 |
1.3 支持语言
JavaScript and TypeScript: https://github.com/microsoft/playwright
Java: https://github.com/microsoft/playwright-java
Python: https://github.com/microsoft/playwright-python
C#: https://github.com/microsoft/playwright-sharp
1.4 官方文档(python)
文档:https://playwright.dev/python/docs/intro
API: https://playwright.dev/python/docs/api/class-playwright
二、开始
2.1 安装要求
- Python 3.8 or higher.
- Windows 10+, Windows Server 2016+ or Windows Subsystem for Linux (WSL).
- MacOS 12 Monterey or MacOS 13 Ventura.
- Debian 11, Debian 12, Ubuntu 20.04 or Ubuntu 22.04.
2.2 安装
安装playwright及Chromium、Firefox和WebKit的浏览器二进制文件
- pip安装
pip install playwright # 安装playwright
playwright install # 安装浏览器驱动
- conda安装
conda install playwright # 安装playwright
playwright install # 安装浏览器驱动
2.3 脚本录制
我们可以先来体验一下脚本录制功能。
python -m playwright codegen 录制脚本
–help 帮助文档
-o 生成自动化脚本的目录(文件默认生成的地址为你cmd运行命令的地址,也可以在命令中输入需要保存的地址)
–target 脚本语言,包含 JS 和 Python,分别对应值为:python 和 javascript
-b 指定浏览器驱动
在cmd中执行命令: python -m playwright codegen -o "./test_code.py" --target python-pytest
参考其他命令:python -m playwright codegen --target python -o test.py -b chromium https://www.baidu.com
注意:如果需要停止脚本录制,只需要关闭浏览器即可。
2.4 代码示例
当前安装版本:
python=3.9.5
playwright=1.37.0
# -*- coding: utf-8 -*-
# @Time : 2023/9/1 10:52
# @Author : chenyinhua
# @File : test_demo.py
# @Software: PyCharm
# @Desc:
import re
from playwright.sync_api import sync_playwright, expect
# 同步API (初学者建议先使用同步API)
with sync_playwright() as playwright:
"""
在使用 with sync_playwright() as playwright: 时,Playwright 会创建一个 Playwright 实例,并将其作为 playwright 变量绑定到 with 代码块中。
在代码块结束时,会自动调用 playwright.close() 方法来关闭所有已创建的页面和浏览器实例。
这样可以确保资源的正常释放和关闭,避免资源泄漏和浪费。因此,使用 with sync_playwright() as playwright: 是一个推荐的方式来管理 Playwright 的实例。
"""
# 默认是无头模式
# browser = playwright.chromium.launch()
# 使用有头模式
browser = playwright.chromium.launch(headless=False, channel="chrome")
"""
通过调用 browser.new_context() 方法,我们可以在当前浏览器实例中创建一个新的上下文。
这个新的上下文将与原始上下文相互隔离,它们不会共享 cookies、缓存等数据。
您可以在同一个浏览器实例中创建多个上下文,每个上下文可以具有自己的页面和状态。
可以理解为浏览器的无痕模式
"""
context = browser.new_context()
"""
一般来说,一个page对应一个浏览器选项卡。而Page对象的作用在于和页面的内容进行交互,以及导航和加载新的页面。
在上下文中创建一个新的页面时,该页面会继承上下文的各种属性和设置,例如 cookies、请求拦截器、代理等。
此外,在同一上下文中创建的页面之间共享网络连接,因此加载速度更快。
"""
page = context.new_page()
# 访问地址
page.goto("https://www.gitlink.org.cn/")
# 断言网页标题=GitLink
expect(page).to_have_title(re.compile("GitLink"))
# 点击按钮,会新开窗口打开页面
page.locator("//a[text()='开源项目']").click()
# 此处需要更新页面的值
page = page.wait_for_event("popup")
# 断言网页标题=开源项目
expect(page).to_have_title(re.compile("开源项目"))