Playwright是一个由微软开发和维护的开源框架,它专注于为现代Web应用程序提供可靠的端到端(e2e)测试。
一、主要特点
- 跨浏览器支持:Playwright支持所有主流浏览器,包括Chromium、WebKit和Firefox。这意味着开发人员可以根据项目需求选择最适合的浏览器进行自动化测试。
- 多语言支持:Playwright支持多种编程语言,如Python、JavaScript和C#,这增加了其在不同开发环境中的灵活性和适用性。之后我们的代码部分操作都是 python 进行操作
- 自动等待和重试:Playwright具有自动等待(auto-wait)和自动重试(auto-retry)功能。这意味着在执行操作时,Playwright会自动等待元素变为可操作状态,并在断言失败时尝试重新执行,从而提高了测试的稳定性和可靠性。
- 丰富的工具选项:Playwright提供了丰富的工具选项,如屏幕录制、时间旅行调试、跟踪等,这些功能使得调试和修复问题变得更加容易。
- 测试隔离:每个测试都在其自己的BrowserContext中运行,这确保了测试之间的独立性。一个测试的失败不会影响其他测试的执行。
- 跨平台支持:Playwright可以在不同的操作系统上运行,这使得开发人员可以更方便地进行跨平台的测试和自动化操作。
二、核心功能
- 脚本录制:Playwright提供了脚本录制功能,允许开发人员通过录制浏览器中的一系列操作来生成对应的自动化测试脚本。这大大降低了编写测试脚本的门槛和难度。
- 定位器和选择器:Playwright支持多种定位器和选择器,如Text、CSS、XPath等。这使得开发人员可以灵活地选择网页上的元素并执行相应的操作。
- 断言:Playwright提供了expect函数来写断言,用于验证网页上的元素是否符合预期。断言会一直等待直到满足预期条件,这提高了测试的准确性和可靠性。
- 并行测试:Playwright支持并行测试,这意味着可以同时运行多个测试,从而加快了测试的执行速度。
三、使用场景
- 自动化测试:Playwright主要用于Web应用程序的端到端自动化测试。通过模拟用户在浏览器中的操作,可以验证应用程序的功能和界面是否正确。
- 爬虫:Playwright也可以用于爬取包含动态内容的网页。通过模拟用户在浏览器中的操作,如渲染JavaScript、点击按钮、填写表单等,可以获取到动态生成的网页内容。
- 自动化任务:除了测试和爬虫之外,Playwright还可以用于执行其他自动化任务,如自动化表单填写、自动化登录等。
四、安装与配置
- 安装Playwright:可以通过pip(Python包管理器)来安装Playwright。安装过程中还会自动下载并安装所需的浏览器驱动程序。
- 配置测试环境:需要配置测试环境,包括设置测试项目、测试配置等。这可以通过使用Playwright Test Runner或命令行工具来完成。
- 系统要求:
Python 3.8 或更高版本。
Windows 10+、Windows Server 2016+ 或适用于 Linux 的 Windows 子系统 (WSL)。
MacOS 12 Monterey 或 MacOS 13 Ventura。
Debian 11、Debian 12、Ubuntu 20.04 或 Ubuntu 22.04。# 安装playwright的python版本 pip install playwright # 安装Playwright所需的所有工具插件和所支持的浏览器 playwright install
五、优势与比较
与Selenium和pyppeteer等传统的浏览器自动化工具相比,Playwright具有更快的执行速度、更高的稳定性和更广泛的浏览器支持。Playwright通过使用浏览器的底层调试协议来进行操作,相比Selenium和pyppeteer具有更低的资源消耗和更高的执行效率。
综上所述,Playwright是一个功能强大、跨浏览器、跨平台的浏览器自动化工具,适用于多种自动化测试和爬虫场景。它提供了丰富的工具选项和灵活的配置方式,使得开发人员可以轻松地编写、执行和调试自动化测试脚本。
六、第一个简单的 Playwright 脚本
一般我们都用同步模式,可以根据自己的需求去考虑是否用异步模式,我们从一个简单的脚本先来熟悉一下他的流程
from playwright.sync_api import sync_playwright
# 同步模式
def sync_main():
with sync_playwright() as p:
# 基于 p 创建的一个浏览器对象,headless=False,可见效果
bro = p.chromium.launch(headless=False)
# 创建浏览器页面
page = bro.new_page()
# 指定页面发送请求
page.goto('https://www.baidu.com/')
# 定时(不需要 time包内的 sleep,page自带
page.wait_for_timeout(2000) #毫秒
# 获取标题
title = page.title()
# 获取页面源码数据
page_text = page.content()
print(title)
print(page_text)
# 要对页面和浏览器进行关闭
page.close()
bro.close()
# 异步模式
import asyncio
from playwright.async_api import async_playwright
async def async_main():
async with async_playwright() as p:
bro = await p.chromium.launch(headless=False)
page = await bro.new_page()
await page.goto('https://www.baidu.com/')
title = await page.title()
page_text = await page.content()
print(title)
print(page_text)
await page.close()
await bro.close()
asyncio.run(async_main())
基础部分先到这,我们后面会更新他的核心使用方法,主要用来做爬虫,后面将会用Playwright去爬取小红书,敬请期待
乾坤未定,你我皆牛马