Playwright自动化网页脚本录制与执行:快速实现指南(附完整Python示例)
一、安装与准备
在开始之前,请确保你已经完成了 Playwright 的安装。如果未安装,可按如下命令进行安装:
pip install playwright playwright install
安装完成后,即可使用 playwright codegen
进行录制和调试。
二、启动 Playwright 并调试页面
Playwright 提供了录制工具,可以边操作网页边自动生成代码。
我们先用命令启动录制模式:
使用命令行启动
playwright codegen --viewport-size=1920,1080 https****** //将窗口大小设置为 1920×1080
这条命令将打开一个 1920×1080 分辨率的浏览器窗口,并自动记录你的每一步操作。同时,会在终端输出等效的 Python 代码,非常适合用于初始脚本的生成。
三、手动编写一个简单的页面自动化示例
以下是使用 sync_playwright()
编写的最小自动化示例。该脚本打开浏览器,进入目标页面,并等待页面加载完成。
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False) # 非无头模式,便于调试
page = browser.new_page()
page.goto("https://***.com/")
# 示例:等待页面加载完
page.wait_for_load_state("networkidle")
# 示例:假设你想点击导航中的某个按钮,需根据 hoverair.com 的结构定位元素
# page.click("text=Shop Now") # 示例,视页面内容调整
# 可在这里添加更多交互...
browser.close()
四、完整的自动化流程实现:从菜单到结账
接下来是一个更完整的场景脚本,模拟了用户从访问页面、浏览产品、选择规格、加入购物车到点击结账的全过程:
import re
from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("https://***.com/")
menu = page.locator("text=Featured products").first # 或根据实际结构找导航栏项
menu.hover() # 触发悬停
page.wait_for_timeout(500) # 稍等下拉弹出(可调)
page.get_by_text("X1 PRO | PROMAX").first.click()
page.get_by_role("link", name="Shop").first.click()
page.locator("label").filter(has_text="Cycling Combo $1,089 $1,292 -").locator("div").first.click()
page.get_by_role("checkbox", name="Beacon & JoySticks Beacon &").check()
# 等待“ADD TO CART”按钮可见且可点击
add_to_cart_btn = page.get_by_role("button", name="ADD TO CART")
add_to_cart_btn.wait_for(state="visible", timeout=10000)
add_to_cart_btn.click()
page.get_by_role("button", name="skip").click()
page.get_by_role("button", name="Increase quantity for HOVERAir X1 PRO & PROMAX").click()
page.get_by_role("button", name="Check out").click()
page.close()
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
五、关键技术点解析
-
非无头模式(headless=False)
有利于调试和观察脚本行为,开发阶段建议打开。 -
等待机制
-
wait_for_timeout(ms)
:强制等待时间,不推荐作为主要方式,但在动画场景中仍可使用。 -
wait_for_load_state("networkidle")
:等待页面静止状态,避免因加载未完成而操作失败。 -
.wait_for(state="visible")
:等待元素真正可见和可交互。 -
定位方式多样
-
get_by_role
、get_by_text
是基于页面语义的方式,推荐优先使用。 -
locator().filter()
是处理多个匹配项中筛选的利器。
六、最佳实践建议
使用上下文(context)管理会话:有助于清晰地控制 cookie/session。
编写可复用函数:将常用操作封装成函数,便于调试与维护。
结合录制与手写代码:录制工具适合原型生成,但仍需人工优化定位方式和结构。
结语
通过本文你可以看到,Playwright 不仅支持强大的页面操作和交互,还能通过 codegen
工具快速生成可运行的脚本,极大提高开发和测试效率。
随着自动化需求的不断增长,掌握像 Playwright 这样现代化的测试工具,将是你构建高效、稳定系统的重要保障。
作者:chao_789