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= 提高定位精准度
相关推荐
用户7785371836961 天前
基于浏览器自动化的 Cookie 获取与复用实践
自动化运维
潘小安13 天前
🍎 Electron 桌面端应用合法性问题全流程解决指南(新手友好版)
electron·mac·自动化运维
智能运维指南18 天前
四大主流平台深度测评:2025企业自动化运维平台选型指南,自动化巡检平台适配关键场景
自动化运维·自动化运维平台·自动化运维厂商·自动化巡检·自动化运维系统·it巡检·服务器巡检
考虑考虑21 天前
Linux查看系统基本信息
运维·后端·自动化运维
却尘21 天前
从53个漏洞到5个:我们用Distroless把容器安全"减"出来了
后端·自动化运维·devops
老实巴交的麻匪25 天前
(八)学习、实践、理解 CI/CD 与 DevOps:持续集成 CI,从源代码到容器镜像
运维·云原生·自动化运维
会飞的小蛮猪1 个月前
ELK运维之路(异常日志告警)
elasticsearch·自动化运维·logstash
会飞的小蛮猪1 个月前
ELK运维之路(使用Logstatsh对日志进行处理综合案例)
elasticsearch·自动化运维·logstash
会飞的小蛮猪1 个月前
ELK运维之路(Logstash基础使用-7.17.24)
elasticsearch·自动化运维·logstash