python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Playwright库详解

Python Playwright库从入门到实战教程

作者:detayun

Playwright是一个用于自动化Web浏览器测试的库,它提供了一种高级的API来模拟用户行为,无论是在自动化测试、爬虫还是生成复杂的用户交互场景中都非常有用,这篇文章主要介绍了Python Playwright库从入门到实战的相关资料,需要的朋友可以参考下

一、项目简介

Playwright是由微软开发的现代化浏览器自动化库,支持通过统一API控制Chromium、Firefox、WebKit三大浏览器引擎。其核心特性包括:

二、安装部署

2.1 环境要求

2.2 快速安装

# 安装核心库
pip install playwright

# 下载浏览器二进制文件(自动识别系统环境)
python -m playwright install

# 安装Pytest插件(可选)
pip install pytest-playwright

2.3 验证安装

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto("https://playwright.dev")
    print(page.title())  # 应输出 "Playwright"
    browser.close()

三、核心功能详解

3.1 基础操作流程

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # 启动浏览器(有头模式便于调试)
    browser = p.chromium.launch(headless=False)
    
    # 创建新上下文(隔离环境)
    context = browser.new_context()
    
    # 打开页面
    page = context.new_page()
    
    # 基础操作示例
    page.goto("https://baidu.com")
    page.fill("input[name=wd]", "Playwright教程")
    page.click("text=百度一下")
    
    # 截图保存
    page.screenshot(path="search_result.png")
    
    # 关闭资源
    context.close()
    browser.close()

3.2 元素定位策略

# 文本选择器(推荐)
page.click("text=立即购买")

# CSS选择器
page.fill(".search-box", "关键词")

# XPath选择器
page.click('//button[@id="submit"]')

# 响应式选择器(自动适配移动端)
page.locator("button:visible").click()

3.3 高级功能实现

3.3.1 网络请求拦截

def test_api_mock():
    with sync_playwright() as p:
        browser = p.chromium.launch()
        page = browser.new_page()
        
        # 启用请求拦截
        page.route("**/api/data", lambda route: route.fulfill(
            status=200,
            json={"message": "Custom Response"}
        ))
        
        page.goto("https://example.com")
        assert page.locator(".data-display").text_content() == "Custom Response"
        
        browser.close()

3.3.2 移动设备模拟

def test_mobile_view():
    with sync_playwright() as p:
        iphone = p.devices['iPhone 12']
        browser = p.chromium.launch()
        
        # 创建移动设备上下文
        context = browser.new_context(
            **iphone,
            locale='zh-CN',
            timezone_id='Asia/Shanghai'
        )
        
        page = context.new_page()
        page.goto("https://m.taobao.com")
        page.screenshot(path="mobile_view.png")
        
        context.close()
        browser.close()

3.3.3 异步执行模式

import asyncio
from playwright.async_api import async_playwright

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()
        await page.goto("https://example.com")
        await browser.close()

asyncio.run(main())

四、最佳实践

4.1 测试组织策略

# pytest_playwright示例
import pytest

@pytest.fixture(scope="function")
def browser():
    pw = sync_playwright().start()
    browser = pw.chromium.launch()
    yield browser
    browser.close()

def test_search(browser):
    page = browser.new_page()
    page.goto("https://bing.com")
    page.fill("input[name=q]", "Playwright最佳实践")
    page.click("text=搜索")
    assert "Playwright最佳实践" in page.content()

4.2 调试技巧

# 日志记录配置
import logging
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s - %(levelname)s - %(message)s'
)

# 截图辅助调试
try:
    page.click("#submit")
except Exception as e:
    page.screenshot(path="error_debug.png")
    raise e

4.3 性能优化

# 并行执行配置(pytest.ini)
[pytest]
addopts = -n auto

# 资源复用
def test_parallel():
    with sync_playwright() as p:
        contexts = []
        for _ in range(10):
            contexts.append(p.chromium.launch().new_context())
        # 并行执行测试...

五、常见问题解决

Q1: 安装时提示"Permission denied"

A: 使用以下命令修复权限:

sudo chown -R $USER ~/.cache/playwright

Q2: 元素定位失败

A: 尝试以下方法:

# 增加等待时间
page.wait_for_selector(".target-element")

# 使用更鲁棒的选择器
page.locator("text=立即购买 >> nth=0").click()

Q3: 如何处理登录认证

A: 使用存储状态功能:

context = browser.new_context(
    storage_state="auth_state.json"
)
# 或手动输入凭证
page.fill("#username", "admin")
page.fill("#password", "123456")
page.click("#login")

六、总结

Playwright通过其现代化的设计和丰富的功能集,已成为Web自动化领域的首选工具。其核心优势体现在:

建议开发者从基础操作入手,逐步掌握网络拦截、设备模拟等高级功能,结合项目需求构建完整的自动化测试体系。

七、附录

到此这篇关于Python Playwright库从入门到实战的文章就介绍到这了,更多相关Python Playwright库详解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文