当前位置: 首页 > news >正文

一文掌握 Playwright 的详细使用

文章目录

    • 1. 安装 Playwright
      • 1.1 安装 Playwright 库
      • 1.2 安装浏览器
    • 2. 基础用法
      • 2.1 启动浏览器
      • 2.2 查找元素
      • 2.3 操作元素
    • 3. 高级功能
      • 3.1 等待机制
      • 3.2 处理弹窗
      • 3.3 执行 JavaScript
      • 3.4 切换 iframe
      • 3.5 处理 Cookies
      • 3.6 截图和 PDF
      • 3.7 模拟设备
      • 3.8 网络拦截
    • 4. 常见应用场景
      • 4.1 自动化登录
      • 4.2 抓取动态加载数据
      • 4.3 模拟下拉菜单选择
    • 5. 异步支持
    • 6. 测试框架集成
    • 7. 调试技巧
      • 7.1 慢动作模式
      • 7.2 调试日志
    • 8. 总结

Playwright 是一个现代化的浏览器自动化工具,支持 Chromium、Firefox 和 WebKit 浏览器。它提供了强大的 API,适用于网页自动化测试、数据抓取和网页交互。Playwright 支持多语言(如 Python、JavaScript、Java、C# 等),并且具有跨浏览器、跨平台的特性。

官网:https://playwright.dev/python/docs/intro
github:https://github.com/microsoft/playwright

本文将详细介绍 Playwright 的安装、基础用法和高级功能。

1. 安装 Playwright

1.1 安装 Playwright 库

使用 pip 安装 Playwright:pip install playwright

1.2 安装浏览器

安装 Playwright 后,需要下载支持的浏览器:playwright install

2. 基础用法

2.1 启动浏览器

Playwright 支持多种浏览器,包括 Chromium、Firefox 和 WebKit。以下是一个简单的示例,启动浏览器并打开网页:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # 启动浏览器
    browser = p.chromium.launch(headless=False)  # headless=False 表示显示浏览器窗口
    # 打开新页面
    page = browser.new_page()
    # 访问网页
    page.goto('https://www.example.com')
    # 截图
    page.screenshot(path='example.png')
    # 关闭浏览器
    browser.close()

2.2 查找元素

Playwright 提供了多种查找元素的方法:

  • page.query_selector():查找单个元素。
  • page.query_selector_all():查找所有匹配的元素。
  • page.locator():通过选择器定位元素。

示例:

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://www.example.com')

    # 通过选择器查找元素
    element = page.query_selector('h1')
    text = element.inner_text()
    print(text)  # 输出元素的文本内容

    browser.close()

2.3 操作元素

输入文本

# 输入文本:page.fill(selector, text)
page.fill('#input-id', 'Hello, Playwright')

点击元素

# 点击元素:page.click(selector)
page.click('#submit-button')

获取元素属性

value = page.get_attribute('#element-id', 'value')

获取元素文本

#  获取元素文本:page.text_content(selector)
text = page.inner_text('#element-id')

3. 高级功能

3.1 等待机制

Playwright 提供了多种等待机制,用于处理页面加载或元素加载的延迟。

等待元素出现

# 等待元素出现:page.wait_for_selector(selector)
page.wait_for_selector('#element-id', timeout=5000)  # 等待最多 5 秒

等待导航完成

page.goto('https://www.example.com', wait_until='networkidle')  # 等待网络空闲

自定义等待

page.wait_for_timeout(2000)  # 等待 2 秒

3.2 处理弹窗

Playwright 可以处理浏览器的弹窗(如警告框、确认框、提示框)。

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()

    # 监听弹窗事件
    page.on('dialog', lambda dialog: dialog.accept())  # 点击确定

    page.goto('https://example.com')
    page.click('button')  # 点击按钮触发弹窗

    browser.close()

3.3 执行 JavaScript

可以通过 page.evaluate() 方法执行 JavaScript 代码。

# 滚动页面到底部
page.evaluate('window.scrollTo(0, document.body.scrollHeight);')

# 修改元素属性
page.evaluate('document.getElementById("element-id").style.backgroundColor = "yellow";')

3.4 切换 iframe

如果需要操作 iframe 中的元素,需要先切换到 iframe。

frame = page.frame(name='iframe-name')
element = frame.query_selector('#element-in-iframe')

3.5 处理 Cookies

Playwright 可以操作浏览器的 Cookies。

# 设置 Cookie
page.context.add_cookies([{'name': 'key', 'value': 'value', 'url': 'https://www.example.com'}])

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

# 删除 Cookie
page.context.clear_cookies()

3.6 截图和 PDF

截图

page.screenshot(path='screenshot.png', full_page=True)  # 截取整个页面

生成 PDF

page.pdf(path='page.pdf', format='A4')

示例:

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')

    # 生成 PDF 文件
    page.pdf(path='example.pdf')

    browser.close()

3.7 模拟设备

Playwright 可以模拟不同的设备(如 iPhone、iPad 等)来测试响应式设计。

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    iPhone = p.devices['iPhone 11']
    context = browser.new_context(**iPhone)
    page = context.new_page()
    page.goto('https://example.com')

    browser.close()

3.8 网络拦截

Playwright 允许你拦截和修改网络请求。

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()

    # 拦截所有请求
    def handle_request(route, request):
        print(request.url)
        route.continue_()  # 继续请求

    page.route('**/*', handle_request)

    page.goto('https://example.com')

    browser.close()

4. 常见应用场景

4.1 自动化登录

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://www.example.com/login')

    # 输入用户名和密码
    page.fill('#username', 'your-username')
    page.fill('#password', 'your-password')

    # 点击登录按钮
    page.click('#login-button')

    browser.close()

4.2 抓取动态加载数据

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://www.example.com/dynamic-content')

    # 等待动态内容加载
    page.wait_for_selector('.dynamic-content')

    # 获取内容
    content = page.inner_text('.dynamic-content')
    print(content)

    browser.close()

4.3 模拟下拉菜单选择

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://www.example.com/form')

    # 选择下拉菜单选项
    page.select_option('#dropdown', 'value1')

    browser.close()

5. 异步支持

Playwright 支持异步操作,适合需要高效处理多个任务的场景。

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.example.com')
        await page.screenshot(path='example.png')
        await browser.close()

asyncio.run(main())

6. 测试框架集成

Playwright 可以与流行的测试框架(如 pytest)集成,用于编写端到端测试。

首先,安装 pytest 和 Playwright 的 pytest 插件:pip install pytest playwright pytest-playwright

然后,编写测试用例:

from playwright.sync_api import Page

def test_example(page: Page):
    page.goto('https://example.com')
    assert page.title() == 'Example Domain'

7. 调试技巧

7.1 慢动作模式

在操作过程中加入延迟,方便观察页面变化。

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://example.com')

    # 启用慢动作模式
    page.click('a[href="/about"]', delay=1000)  # 点击时延迟 1 秒

    browser.close()

7.2 调试日志

启用调试日志,查看 Playwright 的内部操作。

DEBUG=pw:api python script.py

8. 总结

Playwright 是一个功能强大的浏览器自动化工具,适用于网页自动化测试、数据抓取和网页交互。通过掌握其基础用法和高级功能,你可以轻松实现各种浏览器自动化任务。Playwright 支持多浏览器、多语言,并且具有高效的异步操作能力,是现代浏览器自动化的首选工具之一。

相关文章:

  • C++核心指导原则: 表达式和语句
  • AI赋能:使用AI代码生成器提升前端可访问性
  • 2024最新版鸿蒙纯血原生应用开发教程文档丨学习ArkTS语言-基本语法
  • glb模型压缩draco使用教程windows
  • 全方位监控AWS Application Load Balancer异常情况实战
  • LeetCodeHot100_0x02
  • 基于Grok3+NebulaGraph构建省市区乡镇街道知识图谱
  • 复杂提示工程:Chain-of-Thought vs Tree-of-Thought 范式对比
  • 可重入(Reentrant)与可重入锁(Reentrant Lock)详解
  • Unity百游修炼(2)——Brick_Breaker详细制作全流程
  • kotlin 知识点一 变量和函数
  • 蓝桥杯好题推荐--多项式输出
  • Python Flask基于时间序列预测算法的智慧交通数据可视化分析系统【附源码】
  • 【算法系列】常见排序算法:冒泡排序、选择排序与插入排序
  • Unity自定义树(Tree)
  • 城电科技|会追日的智能花,光伏太阳花开启绿色能源新篇章
  • 【无标题】网络安全公钥密码体制
  • html中的元素(2)
  • 云计算相关
  • 苍穹外卖day4套餐管理新增接口个人实现及思考过程记录
  • 杨浦做网站/seo自媒体培训
  • 网站密码如何找回/疫情最新消息今天
  • 网站开发建设流程图/百度业务范围
  • 东台做网站哪家便宜/广西网站建设制作
  • 找人做网站排名优化/网络营销平台有哪些?
  • 建设银行忘记密码网站首页/seo顾问服务