了解 Playwright:Python 自动化测试与爬虫的新工具

208次阅读
没有评论

共计 2565 个字符,预计需要花费 7 分钟才能阅读完成。

在 Python 的自动化测试和爬虫领域,Playwright 作为一款新兴的工具,正逐渐崭露头角。它功能强大,具备多种优点,为开发者提供了高效、便捷的操作体验。本文将全面探讨 Playwright 的使用,从基础到进阶,帮助您深入掌握这一工具。

Playwright 的初印象

Playwright 是一款性能出众的自动化测试工具,具有以下显著优势:

  • 异步支持 :异步操作能够更高效地利用资源,提升整体运行效率。
  • 内置浏览器驱动 :用户无需手动安装浏览器驱动,开箱即用,节省了环境配置的时间。
  • 移动端兼容性 :支持测试移动应用及模拟移动设备访问网页,功能强大。
  • 代码自动生成 :通过简单命令就可以生成代码,极大便利开发工作。
  • 易于安装 :无论是使用 pip 还是 conda,安装过程都非常简单。

安装指南

通过 pip 安装

pip install --upgrade pip
pip install playwright  # 安装 Playwright
playwright install  # 安装驱动 

通过 conda 安装

conda config --add channels conda-forge
conda config --add channels microsoft
conda install playwright  # 安装 Playwright
playwright install  # 安装驱动 

基本使用

同步模式示例

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    page.goto('http://www.baidu.com')
    print(page.title)
    browser.close()

异步模式示例

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("http://www.baidu.com")
        print(await page.title())
        await browser.close()

asyncio.run(main())

深入探索 Playwright

  • 浏览器对象 :可选择不同浏览器版本,如 Microsoft Edge 和 Chrome Beta,通常默认的 Chrome 浏览器即可满足需求。

示例代码 (同步):

browser = playwright.chromium.launch(channel="chrome")
  • 浏览器上下文 :像隐身模式一样的独立会话,适用于多用户和多场景的测试。

示例代码 (同步):

context = browser.new_context()
page = context.new_page()
  • Page 对象 :每个 Page 对象对应一个浏览器标签,可用于与页面内容交互。

管理多个页面

page_one = context.new_page()
page_two = context.new_page()
all_pages = context.pages
  • 打开新选项卡 :对于预期和非预期情况都可以进行处理。
# 预期情况
with context.expect_page() as new_page_info:
    page.locator('a[target="_blank"]').click()
new_page = new_page_info.value
  • 处理弹窗信息 :同样分为预期和非预期情况处理。
# 可预期的情况
with page.expect_popup() as popup_info:
    page.locator("#open").click()
popup = popup_info.value
  • 终端命令使用 :涵盖安装浏览器、系统依赖、代码生成等多项功能。
playwright install webkit  # 安装 WebKit 浏览器驱动
playwright codegen wikipedia.org  # 生成 Wikipedia 的代码 
  • 调试技巧 :可通过设置 headless 和 slow_mo 参数,或打开开发工具来辅助调试。
# 同步模式
chromium.launch(headless=False, slow_mo=100)
  • 下载文件 :支持同步和异步模式的下载文件,用于处理未知下载事件。
with page.expect_download() as download_info:
    page.locator("button#delayed-download").click()
download = download_info.value
  • 句柄(Handles):分为 JSHandle 和 ElementHandle, 用于获取页面元素和检测属性。
element_handle = page.wait_for_selector('#box')
bounding_box = element_handle.bounding_box
  • 定位器(locator):核心功能之一,用于精确查找页面元素。
locator = page.locator("text=Submit")
locator.click()
  • 文本输入 :使用 fill 函数轻松实现文本框输入。
page.locator('#name').fill('Peter')
  • 模拟设备和操作 :可模拟设备、UA、调整窗口大小等。
# 模拟 Pixel 2 设备
pixel_2 = playwright.devices['Pixel 2']
  • 执行 JavaScript:支撑带参数和不带参数的 JavaScript 脚本执行。
href = page.evaluate('() => document.location.href')

最佳实践

使用 Playwright 时,建议优先选择面向用户的属性进行元素定位,避免依赖复杂的 CSS 选择路径,以提升代码的稳定性与可维护性。希望本文能帮助您对 Playwright 有更全面的理解,并在自动化测试与爬虫开发中灵活运用。如有疑问,欢迎在评论区交流!

正文完
 0
评论(没有评论)