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

Playwright从入门到实战:比Selenium更快的数据爬取案例实战

摘要

Playwright 是微软开源的下一代浏览器自动化工具,凭借其高性能、跨浏览器支持和现代化设计,迅速成为 Web 自动化领域的热门选择。本文将从 安装配置 开始,通过 实战演练 展示其核心功能,并与 Selenium 深度对比,帮助开发者选择适合的工具。

在这里插入图片描述

一、Playwright 基础前置知识

1. 什么是 Playwright?

Playwright 是一个支持 Chromium、Firefox、WebKit 的浏览器自动化工具,提供统一的 API 控制不同浏览器,适用于网页爬虫、自动化测试、数据采集等场景。

2. 安装前的准备
  • Python 环境:确保已安装 Python 3.7+,并配置好环境变量(参考 Python 官方安装指南)。
  • 权限问题:若在 Windows 系统中遇到权限错误,建议以管理员身份运行 PowerShell。
3. 安装 Playwright
# 安装 Python 库
pip install playwright

# 下载浏览器驱动(自动执行)
python -m playwright install
  • 验证安装:

    from playwright.sync_api import sync_playwright
    with sync_playwright() as p:
        print(p.chromium.version)  # 输出 Chromium 版本号
    

二、Playwright 实战演练:爬取电商网站数据

1. 示例场景

访问电商网站(示例使用 https://books.toscrape.com/),搜索书籍并提取价格信息。

2. 完整代码
from playwright.sync_api import sync_playwright

def scrape_books():
    with sync_playwright() as p:
        # 启动浏览器(支持无头模式)
        browser = p.chromium.launch(headless=False)
        page = browser.new_page()

        try:
            # 访问目标页面
            page.goto("https://books.toscrape.com/", timeout=30000)

            # 搜索书籍
            search_box = page.locator('input[name="q"]')
            search_box.fill("Python编程")
            search_box.press("Enter")

            # 等待结果加载
            page.wait_for_selector(".product_pod", state="visible")

            # 提取数据
            books = page.locator_all(".product_pod")
            for book in books:
                title = book.locator("h3 a").inner_text()
                price = book.locator(".price_color").inner_text()
                print(f"书名: {title}, 价格: {price}")

            # 截图保存
            page.screenshot(path="search_results.png")

        except Exception as e:
            print(f"操作失败: {e}")
        finally:
            browser.close()

if __name__ == "__main__":
    scrape_books()
3. 代码解析
  • 智能等待page.wait_for_selector() 自动处理页面加载延迟。
  • 异常处理try-except-finally 结构提升脚本健壮性。
  • 元素定位:通过 CSS 选择器精准定位元素(如输入框、商品卡片)。

三、Playwright vs Selenium:深度对比

1. 核心差异总结
维度PlaywrightSelenium
启动速度更快(直接通过 CDP 连接)。较慢(需启动独立浏览器进程)。
元素等待智能自动等待,减少代码量。需手动添加显式/隐式等待。
跨浏览器支持原生支持 Chromium/Firefox/WebKit。需下载不同驱动(如 ChromeDriver)。
弹窗处理内置处理 iframe、弹窗、页面跳转。需手动切换上下文(如 driver.switch_to.alert)。
移动端模拟内置设备模拟(如 iPhone、Android)。需手动设置 User-Agent 和视口。
网络拦截支持请求拦截与修改(如 page.route())。需依赖插件或代理(如 BrowserMob)。
2. 适用场景推荐
  • 选择 Playwright:

    • 需要处理动态加载、弹窗等复杂交互。
    • 要求跨浏览器测试统一性。
    • 追求最新特性(如视口缩放、设备模拟)。
  • 选择 Selenium:

    • 维护老旧项目(如兼容 IE 11)。
    • 依赖现有 Selenium 生态(如云测试平台)。

四、Playwright 高级技巧

1. 多标签页操作
with browser.new_page() as new_page:
    new_page.goto("https://example.com")
    print(new_page.title())
2. 拦截网络请求
def handle_route(route):
    if "ads" in route.url:
        route.abort()  # 屏蔽广告请求

page.route("**/*", handle_route)
3. 无头模式与有头模式切换
browser = p.chromium.launch(headless=True)  # 无界面模式(默认)
browser = p.chromium.launch(headless=False) # 显示浏览器界面(调试模式)

五、总结与建议

1. Playwright 的优势
  • 高效稳定:自动处理异步加载,减少脚本维护成本。
  • 功能全面:内置截图、录屏、网络拦截等实用工具。
  • 未来趋势:微软持续更新,社区生态快速成长。
2. 如何选择工具?
  • 新项目优先选 Playwright:覆盖现代 Web 应用需求。
  • 旧系统兼容选 Selenium:解决 IE 11 等遗留问题。
3. 注意事项
  • 合法合规:遵守目标网站的 robots.txt 协议。
  • 反爬策略:合理设置请求频率,避免触发封禁。

通过本文,您已掌握 Playwright 的基础用法、实战技巧及与 Selenium 的差异。无论是网页爬虫还是自动化测试,Playwright 都能提供高效可靠的解决方案。立即尝试并探索其更多可能性吧!

http://www.dtcms.com/a/99820.html

相关文章:

  • STL-string容器
  • 蓝桥杯嵌入式学习笔记
  • SQL IF(xxx, 1, 0) 窗口函数
  • 【嵌入式学习3】TCP服务器客户端 - UDP发送端接收端
  • Supabase 匿名密钥与服务角色密钥详细对比文档
  • .NET 9 中的新增功能:关键更新和 C# 12 功能简化
  • C#核心学习(一)面向过程与面向对象编程---初识类和对象
  • 深入理解MySQL聚集索引与非聚集索引
  • fetch的语法规则及常见用法
  • EasyExcel 与 Apache POI:Java 操作 Excel 的详解
  • 6-1-1 利用AI完成一个可视化看板
  • 如何监控和优化服务器的 CPU 性能
  • 视频联网平台智慧运维系统:智能时代的城市视觉中枢
  • 记录一次Dell服务器更换内存条报错解决过程No memory found
  • 基于微波光子信道的图像传输系统matlab仿真,调制方式采用OFDM+QPSK,LDPC编译码以及LS信道估计
  • 机器学习——集成学习框架(GBDT、XGBoost、LightGBM、CatBoost)、调参方法
  • 计算机基础
  • 睡眠健康领域的智能硬件设备未来的发展趋势
  • C语言术语
  • 算法刷题记录——LeetCode篇(1.3) [第21~30题](持续更新)
  • 分库分表详解
  • 关于c++的FLOYD算法 P2910 [USACO08OPEN] Clear And Present Danger S 题解
  • Spring Boot 整合 RabbitMQ:注解声明队列与交换机详解
  • 高级SQL技巧
  • Linux(8.6)rsync
  • 33. Java 流程控制语句 If-Then-Else 语句
  • [原创](现代C++ Builder 12指南): 如何使用System.JSON?
  • Gitee批量删除仓库
  • 美食菜谱数据集 | 智能体知识库 | AI大模型
  • 力扣HOT100之普通数组:41. 缺失的第一个正数