前言
在Web自动化领域,Selenium曾经是无可争议的王者。然而,随着现代网页应用变得越来越复杂(动态内容、SPA、WebSocket),传统的自动化工具开始显得力不从心。为了应对这些挑战,一个更现代化、更快速、更可靠的工具应运而生——它就是由微软开发的Playwright
。
Playwright是为现代Web应用量身打造的浏览器自动化库。它提供了统一的API来控制Chromium(Chrome, Edge)、Firefox和WebKit(Safari),并拥有许多激动人心的特性,如自动等待、网络拦截、多页面/多上下文等。
无论你是想做端到端(E2E)测试、网页截图,还是构建复杂的网络爬虫,Playwright都能提供前所未有的开发体验。本文将带你入门Playwright for Python,领略其强大之处。
环境准备
1. 安装Playwright
首先,安装Playwright的Python包:
pip install playwright
2. 安装浏览器驱动
Playwright需要下载它所支持的浏览器的驱动文件。只需一条命令即可完成:
playwright install
这条命令会下载Chromium、Firefox和WebKit的最新版本,并将它们存储在本地缓存中,供Playwright使用。
核心概念:为可靠性而设计
Playwright的设计核心是可靠性。它通过以下几个关键特性解决了传统自动化工具常见的“ flaky tests”(不稳定的测试)问题:
- 自动等待 (Auto-Waits): Playwright的每一个交互操作(如
click()
,fill()
)都会自动等待目标元素变得“可操作”(例如,可见、稳定、已附加到DOM)。你不再需要手动添加sleep()
或显式等待,代码更简洁,执行也更可靠。 - Web-First断言: Playwright的断言(Assertions)是专门为动态Web设计的。例如,
expect(locator).to_be_visible()
会智能地等待元素可见,而不是在检查时立即失败。 - 追踪 (Tracing): Playwright可以录制测试执行的完整轨迹,包括DOM快照、网络请求和控制台日志。当测试失败时,你可以得到一个包含所有信息的HTML报告,轻松复现和调试问题,就像拥有一个时间机器一样。
实战:编写你的第一个Playwright脚本
让我们来编写一个简单的脚本,它会访问Hacker News,搜索“Playwright”,并截取搜索结果页面的图片。
1. 同步 vs. 异步API
Playwright同时提供了同步和异步两种API。对于初学者和大多数脚本,同步API更简单直观。我们将使用同步API。
2. 编写脚本
创建一个名为hackernews_scraper.py
的文件:
from playwright.sync_api import sync_playwright, expect
def run(playwright):
# 启动Chromium浏览器
browser = playwright.chromium.launch(headless=False) # headless=False可以看到浏览器界面
# 创建一个新的浏览器上下文和页面
context = browser.new_context()
page = context.new_page()
# 1. 访问Hacker News
page.goto("https://news.ycombinator.com")
# 2. 找到搜索框并输入"Playwright"
# Playwright的locator非常强大,支持CSS选择器、XPath、文本内容等
search_box = page.locator('input[name="q"]')
search_box.fill("Playwright")
# 3. 按下回车键提交搜索
search_box.press("Enter")
# 4. 等待搜索结果加载
# 我们可以等待特定的元素出现来确认页面加载完成
first_result = page.locator("li.Story").first
expect(first_result).to_be_visible() # 使用web-first断言
print(f"页面标题: {page.title()}")
# 5. 截取页面
page.screenshot(path="hn_playwright_results.png")
# 关闭浏览器
browser.close()
with sync_playwright() as playwright:
run(playwright)
print("脚本执行完毕,截图已保存为 hn_playwright_results.png")
3. 执行脚本
在终端中运行它:
python hackernews_scraper.py
你会看到一个浏览器窗口自动打开,执行我们定义好的所有操作,然后关闭。执行完毕后,项目目录下会生成一张名为hn_playwright_results.png
的截图。
Codegen:自动生成代码
Playwright最酷的功能之一是Codegen。它可以记录你在浏览器中的操作,并自动为你生成Playwright脚本。这对于初学者学习API或快速创建测试脚本来说是绝佳的工具。
在终端中运行以下命令:
playwright codegen https://github.com
这会打开一个浏览器窗口和一个Playwright Inspector窗口。现在,你在浏览器中的所有操作(点击、输入等)都会被记录下来,并实时转换成Python代码显示在Inspector中。完成操作后,复制生成的代码即可。
总结
Playwright通过其现代化的API、强大的可靠性特性和出色的开发者工具(如Codegen和Tracing),为浏览器自动化设立了新的标杆。它大大降低了编写稳定、高效的自动化脚本的难度。
相比于Selenium,Playwright提供了更快的执行速度、更可靠的操作和更丰富的功能(如网络拦截)。这使得它不仅是E2E测试的理想选择,也成为构建健壮网络爬虫和执行任何浏览器自动化任务的首选工具。
这四天的系列文章我们介绍了从AI智能体框架(MetaGPT, CrewAI)到Web应用构建(Streamlit)再到浏览器自动化(Playwright)的多个强大工具。希望这些内容能为你打开新的思路,帮助你在AI和自动化时代保持领先。
...