
以下简单介绍下Playwright基本使用,后续会以系列文章进行深入了解和学习。
pip install playwright
playwright install

from playwright.sync import sync_playwright
# 启动 Playwright 上下文(同步模式)
with sync_playwright() as p:
# 启动浏览器(可选参数:headless=False 显示浏览器窗口)
browser = p.chromium.launch(headless=False)
# 创建新页面
page = browser.new_page()
# 访问百度
page.goto("https://www.baidu.com")
# 定位搜索框并输入内容(使用 CSS 选择器)
page.locator("#kw").fill("Playwright")
# 点击搜索按钮
page.locator("#su").click()
# 等待页面加载完成(自动等待,无需手动 sleep)
page.wait_for_load_state("networkidle")
# 截图保存
page.screenshot(path="playwright_search.png")
# 关闭浏览器
browser.close()sync_playwright():同步模式上下文(适合简单脚本),也可使用 async_playwright() 异步模式。 browser:浏览器实例(如 chromium、firefox、webkit)。
page:标签页实例,所有操作都通过 page 对象执行。
Playwright 提供了多种定位元素的方式,推荐使用 locator 方法(自动等待元素可见,无需手动处理延迟)。
方法 | 示例 | 说明 |
|---|---|---|
CSS 选择器 |
| 通过 ID、类名、标签等定位 |
XPath 表达式 |
| 通过 XPath 定位 |
文本内容 |
| 匹配元素文本 |
占位符(placeholder) |
| 匹配输入框占位符 |
标签文本 |
| 组合定位(标签包含文本) |
# 填写表单
page.locator("input[name='username']").fill("test_user") # 输入文本
page.locator("input[type='password']").fill("123456")
page.locator("select[name='role']").select_option("admin") # 选择下拉框
page.locator("input[type='checkbox']").check() # 勾选复选框
# 获取元素文本/属性
username = page.locator("#username").input_value() # 获取输入框值
btn_text = page.locator("button").text_content() # 获取元素文本
link_href = page.locator("a").get_attribute("href") # 获取属性值page.goto("https://example.com") # 访问URL
page.reload() # 刷新页面
page.go_back() # 后退
page.go_forward() # 前进Playwright 自动等待元素可交互,但复杂场景下可手动指定等待条件:
# 等待页面加载状态(load/networkidle/domcontentloaded)
page.wait_for_load_state("networkidle")
# 等待元素出现
page.wait_for_selector("#result")
# 等待时间(毫秒)
page.wait_for_timeout(1000) # 不推荐,尽量用条件等待page.locator("button").click() # 普通点击
page.locator("a").dblclick() # 双击
page.locator("div").hover() # 鼠标悬停
page.keyboard.press("Enter") # 按下回车键
page.mouse.click(x=100, y=200) # 坐标点击可拦截请求、修改响应,常用于模拟接口返回或屏蔽广告:
# 拦截所有图片请求并取消
def handle_route(route):
if route.request.resource_type == "image":
route.abort() # 取消请求
else:
route.continue_() # 继续其他请求
page.route("**/*", handle_route) # 注册拦截规则
page.goto("https://example.com")# 新建上下文(可设置 cookies、用户代理等)
context = browser.new_context(
user_agent="Mozilla/5.0 (Windows NT 10.0; ...)",
viewport={"width": 1280, "height": 720}
)
page1 = context.new_page()
page2 = context.new_page() # 同一上下文共享 cookies
# 切换页面
with page1.expect_page() as new_page_info:
page1.locator("a[target='_blank']").click() # 点击打开新页面
new_page = new_page_info.value # 获取新页面实例# 页面截图(全屏)
page.screenshot(path="full_page.png", full_page=True)
# 元素截图
page.locator("#result").screenshot(path="element.png")
# 录屏(需在启动浏览器时开启)
browser = p.chromium.launch(record_video_dir="videos/")
page = browser.new_page()
page.goto("https://example.com")
browser.close() # 自动保存视频Playwright 推荐使用异步模式(asyncio)提升性能,尤其适合批量操作:
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
page = await browser.new_page()
await page.goto("https://www.baidu.com")
await page.locator("#kw").fill("Playwright 异步")
await page.locator("#su").click()
await page.wait_for_load_state("networkidle")
await browser.close()
asyncio.run(main())Playwright 可与 pytest 结合,编写自动化测试用例:
pip install pytest-playwrightdef test_baidu_search(page):
page.goto("https://www.baidu.com")
page.locator("#kw").fill("Playwright")
page.locator("#su").click()
page.wait_for_selector("#content_left")
assert "Playwright" in page.title()pytest test_baidu.py --headed # --headed 显示浏览器窗口其他的内容可以详细去官网看看,还有很多内容,这里简单介绍下,后边以系列文档详细了解和学习。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。