Playwright 是 Microsoft 开源的一个强大浏览器自动化工具,支持 Chromium、Firefox 和 WebKit,适合用于端到端测试、爬虫和自动化任务。

下面是 Playwright 的常见使用场景和示例(以 Python 和 Node.js 为主):


1. 安装 Playwright

Node.js:

npm install -D playwright
# 或选择特定浏览器版本
npm install -D playwright-chromium
npx playwright install

Python:

pip install playwright
playwright install

2. 打开网页并截图

Node.js (JavaScript / TypeScript):

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await page.screenshot({ path: 'example.png' });
  await browser.close();
})();

Python:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto("https://example.com")
    page.screenshot(path="example.png")
    browser.close()

✍️ 3. 表单交互(填写、点击、上传等)

page.fill('#username', 'myuser')
page.fill('#password', 'mypassword')
page.click('button[type="submit"]')

⏱ 4. 等待元素出现

page.wait_for_selector('.loading', state='hidden')  # 等待加载动画消失

📤 5. 文件上传

page.set_input_files('input[type="file"]', 'myfile.pdf')

context = browser.new_context(storage_state="state.json")
# ...
context.storage_state(path="state.json")

🧪 7. 使用测试框架(例如 pytest

# conftest.py
import pytest
from playwright.sync_api import sync_playwright


@pytest.fixture(scope="session")
def browser():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        yield browser
        browser.close()

🧭 8. 导航与多标签页/多页面

page1 = context.new_page()
page2 = context.new_page()
page1.goto("https://a.com")
page2.goto("https://b.com")

🔍 9. 元素定位(Selectors)

  • page.get_by_role("button", name="提交")
  • page.locator('div >> text=Hello')
  • CSS: page.locator(".my-class")
  • XPath: page.locator('//button[@type="submit"]')

🧱 10. 拦截网络请求 / 模拟响应

def handle_route(route, request):
    if 'analytics' in request.url:
        route.abort()
    else:
        route.continue_()


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

📹 11. 录制视频 / 追踪

context = browser.new_context(record_video_dir="videos/")
page = context.new_page()
page.goto("https://example.com")
context.close()

🧰 12. Headless 和 Devtools 模式

browser = p.chromium.launch(headless=False, devtools=True)

🧪 13. 断言(结合测试)

assert page.inner_text("h1") == "Welcome"


Back to top

Press ctrl+k to search

Page last modified: Jul 15 2025 at 12:00 AM.