Playwright最常用的功能语句汇总

以下是 Playwright(Python)最常用的功能语句汇总,覆盖日常自动化测试与爬虫开发中的核心操作。


🧰 一、启动与页面控制

csharp 复制代码
python
编辑
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # 启动浏览器(headless=False 可见模式)
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()

    # 打开网页
    page.goto("https://example.com")

    # 设置视口大小
    page.set_viewport_size({"width": 1920, "height": 1080})

    # 等待页面加载完成
    page.wait_for_load_state("networkidle")  # 或 "load", "domcontentloaded"

    browser.close()

🔍 二、元素定位(Locator)

Playwright 推荐使用 page.locator()(比 page.click(selector) 更强大)

makefile 复制代码
python
编辑
# 常用选择器
page.locator("#id")                # ID
page.locator(".class")             # 类名
page.locator("text=按钮文本")       # 文本匹配(智能)
page.locator("input[name='email']")# 属性
page.locator("button:has-text('提交')") # 包含指定文本的按钮
page.locator("div >> text=内容")    # 组合选择器(CSS + 文本)

# 获取多个元素
items = page.locator(".item")
count = items.count()
first_item = items.first
last_item = items.last
third_item = items.nth(2)  # 从0开始

✏️ 三、交互操作

bash 复制代码
python
编辑
# 点击
page.locator("button").click()
page.click("text=登录")  # 简写(不推荐复杂场景)

# 输入文本
page.locator("#username").fill("admin")      # 清空后输入(推荐)
page.locator("#comment").type("Hello")       # 模拟逐字输入(慢)

# 清空输入框
page.locator("#search").clear()

# 悬停
page.locator(".menu-item").hover()

# 双击 / 右键
page.locator("#target").dblclick()
page.locator("#target").click(button="right")

# 按键(在输入框中按回车)
page.press("#search", "Enter")
page.keyboard.press("Tab")

📥 四、表单与下拉框

标准 <select> 下拉框:

ini 复制代码
python
编辑
# 选择第一个选项
page.locator("select#country").select_option(index=0)

# 按 value 选
page.locator("select").select_option(value="CN")

# 按可见文本选
page.locator("select").select_option(label="中国")

自定义下拉(div 模拟):

makefile 复制代码
python
编辑
dropdown = page.locator("#city-selector")
dropdown.locator(".trigger").click()
dropdown.locator("text=上海").click()  # 在容器内找

文件上传:

css 复制代码
python
编辑
page.set_input_files("input[type='file']", "path/to/file.pdf")

复选框 / 单选框:

bash 复制代码
python
编辑
page.check("#agree")      # 勾选
page.uncheck("#news")     # 取消勾选
page.is_checked("#agree") # 判断是否选中

⏳ 五、等待(Wait)

perl 复制代码
# 等待元素出现(推荐)
page.wait_for_selector("text=成功", timeout=5000)

# 等待元素可点击
page.wait_for_selector("button#submit", state="visible")
page.locator("button#submit").wait_for(state="enabled")

# 等待网络请求完成
page.wait_for_load_state("networkidle")

# 等待特定 URL
page.wait_for_url("**/dashboard")

# 等待弹窗(alert/confirm)
page.on("dialog", lambda dialog: dialog.accept())

📡 六、网络与请求拦截

vbscript 复制代码
# 拦截 API 请求并修改响应(Mock)
def handle_route(route):
    if "api/user" in route.request.url:
        route.fulfill(json={"name": "Mock User"})
    else:
        route.continue_()

page.route("**/api/**", handle_route)

# 监听请求/响应
page.on("request", lambda request: print(">>", request.method, request.url))
page.on("response", lambda response: print("<<", response.status, response.url))

📸 七、截图与录屏

ini 复制代码
# 截图整个页面
page.screenshot(path="full.png", full_page=True)

# 截图某个元素
page.locator("#chart").screenshot(path="chart.png")

# 录屏(需启动时开启)
browser = p.chromium.launch(record_video_dir="videos/")
page = browser.new_page()
# ...操作...
page.video.path()  # 获取视频路径

🌐 八、多页面与弹窗处理

ini 复制代码
# 等待新页面打开
with page.expect_popup() as popup_info:
    page.click("a[target='_blank']")
new_page = popup_info.value

# 切换到 iframe
frame = page.frame_locator("iframe[name='myframe']")
frame.locator("#inside-input").fill("hello")

# 关闭当前页
page.close()

🍪 九、Cookie 与 Storage

bash 复制代码
# 设置 Cookie
page.context.add_cookies([{"name": "token", "value": "abc123", "url": "https://example.com"}])

# 获取 Cookie
cookies = page.context.cookies()

# 本地存储
page.evaluate("localStorage.setItem('theme', 'dark')")
theme = page.evaluate("localStorage.getItem('theme')")

🧪 十、断言(配合 pytest)

python 复制代码
# 元素存在
assert page.locator("text=欢迎").is_visible()

# 文本内容
assert page.locator("#title").inner_text() == "首页"

# URL 包含
assert "success" in page.url

# 元素数量
assert page.locator(".item").count() == 5

💡 小技巧

  • 自动等待 :Playwright 的 click()fill() 等操作会自动等待元素可操作,通常无需手动加 wait

  • 选择器调试 :在浏览器 DevTools Console 中用 $$(selector) 测试 CSS 选择器。

  • 录制脚本:用官方工具生成代码(bash):

    arduino 复制代码
    playwright codegen https://example.com

✅ 最佳实践建议

  1. 优先使用 locator 而非全局选择器
  2. 避免 time.sleep(),用 Playwright 内置等待
  3. 对自定义组件封装成函数 (如 select_dropdown(page, label, option));
  4. has_text=has= 提高定位精准度
相关推荐
神奇的程序员6 天前
实现一个内网服务监测告警系统
后端·自动化运维
智能运维指南11 天前
2025自动化巡检能力:自动化运维厂商如何破解合规与效率双重难题?
自动化运维·自动化巡检·自动化运维系统·it巡检·运维自动化·国产自动化运维厂商·国产自动化运维平台
码途进化论12 天前
基于 Node.js 和 SSH2 的 Docker 自动化部署实践
前端·自动化运维
该用户已不存在12 天前
Let’s Encrypt 证书有效期将缩至 45 天,运维天都塌了
运维·https·自动化运维
kaliarch13 天前
2025年IaC生态全景与实践指南:从工具选型到多云治理
后端·云计算·自动化运维
刚哥的进化路18 天前
Linux系统日志管理完全教程:从基础查看 to 集中分析(附实战命令)
运维·自动化运维
互联网小顽童18 天前
Linux系统进阶管理教程:从基础操作到企业级运维(附实战命令)
运维·自动化运维
猿先生13319 天前
Docker Compose 部署certbot实现TLS证书签发和续期
自动化运维
Mintopia22 天前
🌐 多用户并发请求下的 WebAIGC 服务稳定性技术保障
javascript·人工智能·自动化运维