首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-04-25 07:44
  • 2552
  • 12506
blog.csdn.net
摘要

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 验证安装:

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

二、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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
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())
  • 1
  • 2
  • 3
2. 拦截网络请求
def handle_route(route):
    if "ads" in route.url:
        route.abort()  # 屏蔽广告请求

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

五、总结与建议

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

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

注:本文转载自blog.csdn.net的梦想画家的文章"https://blog.csdn.net/neweastsun/article/details/146692127"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

127
测试
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top