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

【Python】Playwright:环境配置与自动生成代码

在Web自动化和测试领域,Playwright 是一款功能强大且灵活的工具,它支持多种浏览器和语言,并且可以轻松处理复杂的浏览器操作和测试任务。本文将详细介绍如何在Python环境中安装和配置Playwright,掌握浏览器驱动的设置,并理解浏览器上下文和无头模式的基本概念。

什么是Playwright

Playwright是由微软开发的开源自动化框架,专为现代Web应用的测试和自动化操作而设计。与Selenium类似,Playwright支持多个浏览器(如Chromium、Firefox、WebKit),并且能够无缝地在这些浏览器中执行脚本。此外,Playwright还能自动化许多高级操作,如网络请求拦截、模拟地理位置、无头模式(Headless Mode)等。

Playwright的主要特点:

  • 多浏览器支持:支持Chromium(包括Google Chrome和Microsoft Edge)、Firefox和WebKit(Safari)。
  • 并行测试:能够轻松启动多个浏览器实例并行进行测试。
  • 无头浏览器支持:可以在无UI模式下快速执行浏览器操作,适合CI/CD集成。
  • 自动处理等待:Playwright能够智能处理页面加载等待,避免手动设置等待时间。

Playwright的安装和环境配置

安装Python与pip

首先,确保系统中已经安装了Python和pip。你可以在命令行中执行以下命令检查是否安装:

python --version
pip --version

如果没有安装,可以从Python官网下载并安装。

安装Playwright库

安装Playwright的Python库非常简单,只需要执行以下命令:

pip install playwright

安装浏览器驱动

Playwright不仅仅是一个库,它还能够自动管理和下载浏览器驱动。在你安装完库之后,执行以下命令来安装所有受支持的浏览器:

playwright install

此命令会下载并安装Chromium、Firefox和WebKit的相关浏览器版本。你可以根据需要指定浏览器类型,例如只安装Chromium驱动:

playwright install chromium

安装完成后,Playwright就能自动使用这些浏览器进行自动化操作。

验证安装

安装完成后,可以通过以下命令验证Playwright是否已经正确安装并能够运行:

python -m playwright codegen https://example.com

此命令会打开Playwright的“Codegen”工具,它能够自动生成Python代码。浏览器会打开 https://example.com,你可以进行一些交互,生成的代码将显示在终端中。

浏览器驱动的使用:Chromium、Firefox 和 WebKit

Playwright最大的优点之一是它支持多种浏览器。你可以通过简单的命令控制不同的浏览器,而无需复杂的配置。

使用Chromium

Chromium是开源版本的Google Chrome浏览器,可以通过Playwright轻松调用。以下是启动Chromium的基础代码:

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')
    print(page.title())
    browser.close()

在上面的代码中,我们使用了 p.chromium.launch() 启动Chromium浏览器,并通过 page.goto() 访问网页。

使用Firefox

Playwright还支持Firefox浏览器,你可以通过类似的方法启动Firefox:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.firefox.launch(headless=False)
    page = browser.new_page()
    page.goto('https://example.com')
    print(page.title())
    browser.close()

使用WebKit

WebKit是Safari浏览器的引擎,Playwright也支持对其进行操作。代码如下:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.webkit.launch(headless=False)
    page = browser.new_page()
    page.goto('https://example.com')
    print(page.title())
    browser.close()

浏览器上下文(Browser Context)

浏览器上下文 是Playwright中的一个重要概念。它允许你在同一个浏览器实例中创建多个独立的会话,类似于不同的浏览器窗口。每个上下文都是相互隔离的,具有独立的cookie、缓存和存储。这使得在测试中可以轻松处理多个用户会话或窗口。

创建浏览器上下文

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    context = browser.new_context()  # 创建新的浏览器上下文
    page = context.new_page()
    page.goto('https://example.com')
    print(page.title())
    browser.close()

在上面的代码中,browser.new_context() 创建了一个新的上下文,context.new_page() 在该上下文中创建了一个新的页面。这些上下文是彼此独立的,这意味着你可以在不同的上下文中执行不同的会话,而不会相互干扰。

上下文的实际应用

浏览器上下文在自动化测试中非常有用,特别是在处理需要多个用户会话的场景时。例如,你可以使用不同的上下文来模拟两个用户在同一网站上的独立操作:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    
    # 用户1的会话
    context1 = browser.new_context()
    page1 = context1.new_page()
    page1.goto('https://example.com/login')
    
    # 用户2的会话
    context2 = browser.new_context()
    page2 = context2.new_page()
    page2.goto('https://example.com/login')

    browser.close()

无头模式(Headless Mode)

无头模式 是指浏览器在后台运行,不显示UI。这种模式通常用于自动化测试或在CI环境中执行脚本,因为它速度更快,资源占用更少。

启动无头模式

默认情况下,Playwright会在无头模式下启动浏览器。如果你想显示浏览器UI,你可以通过设置 headless=False 来启动普通模式。

无头模式示例:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)  # 无头模式
    page = browser.new_page()
    page.goto('https://example.com')
    print(page.title())
    browser.close()

无头模式的应用场景

无头模式非常适合以下场景:

  • CI/CD 集成:在持续集成中进行自动化测试,不需要显示浏览器UI。
  • 数据抓取:需要在后台高效地抓取网页数据,而不需要实际看到浏览器的操作过程。
  • 性能测试:由于没有UI渲染的开销,无头模式可以更快地执行测试。

自动生成代码

Playwright 的自动生成代码功能是一种录制用户操作并自动生成 Python(或其他支持的语言)代码的工具。你只需在浏览器中进行一系列操作,Playwright 会将这些操作记录下来,并自动生成相应的代码。这使得自动化测试变得更加简单,即使没有太多编程经验,也能快速生成并运行测试脚本。

启动代码生成器

假设我们要自动生成一个登录操作的代码。在命令行中运行以下命令:

playwright codegen https://example.com --target python

此时,浏览器窗口会打开 https://example.com,同时会打开一个 Playwright 录制器窗口。在录制器窗口中,你可以看到 Playwright 生成的代码。

进行页面操作

接下来,在浏览器中执行以下操作:

  1. 在页面上点击某个链接。
  2. 填写表单中的用户名和密码。
  3. 点击登录按钮。

Playwright 将自动生成相应的 Python 代码,并在录制器窗口中显示。录制器会根据你的操作,自动调用 Playwright 的 API,如 goto()click()fill() 等。

生成的代码示例

以下是 Playwright 为你生成的代码示例:

from playwright.sync_api import Playwright, sync_playwright

def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    page = browser.new_page()

    # 访问网页
    page.goto("https://example.com")

    # 点击链接
    page.click("text=More information")

    # 填写表单
    page.fill('input[name="username"]', 'myusername')
    page.fill('input[name="password"]', 'mypassword')

    # 点击登录按钮
    page.click('button[type="submit"]')

    # 关闭浏览器
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

这个代码就是 Playwright 自动生成的,它模拟了你在浏览器中执行的所有操作,包括访问页面、填写表单、点击按钮等。

运行生成的代码

在生成代码后,你可以将其保存为一个 Python 文件,例如 test_login.py,并通过以下命令运行它:

python test_login.py

此时,Playwright 会启动一个浏览器,自动执行你之前录制的操作。

定制生成的代码

虽然 Playwright 能自动生成代码,但在实际使用过程中,你可能需要对生成的代码进行一些定制或优化。以下是几种常见的定制方式:

修改选择器

默认情况下,Playwright 会根据元素的文本内容或最简单的选择器来生成代码。在某些情况下,你可能需要修改选择器,使其更加稳定。例如:

  • 将文本选择器替换为 CSS 选择器。
  • 使用唯一的属性(如 idclass)来定位元素。
生成的选择器代码:
page.click("text=More information")
修改为更可靠的 CSS 选择器:
page.click("a.more-info")

添加断言

断言可以确保你的测试不仅仅是模拟用户操作,还可以验证操作结果。例如,在登录成功后,你可以检查页面是否跳转到预期的 URL,或者某个元素是否存在。

assert page.url == "https://example.com/dashboard"

设置超时

有时页面的加载速度可能会不稳定,你可以通过设置超时来避免测试过早失败。Playwright 提供了丰富的选项来控制等待时间和超时。

page.goto("https://example.com", timeout=10000)  # 设置超时为10秒

总结

在本文中,我们详细介绍了Playwright的安装与基础配置,并通过代码示例讲解了如何使用不同的浏览器驱动(Chromium、Firefox、WebKit)进行自动化操作。同时,我们还探讨了浏览器上下文和无头模式的概念,它们是Playwright在Web自动化测试中的核心功能。

Playwright 的自动生成代码功能大大简化了 Web 自动化测试的编写过程。通过记录用户在浏览器中的操作,Playwright 能够快速生成 Python 脚本,帮助开发人员或测试人员进行 Web 自动化任务。在实际工作中,你可以使用代码生成器快速搭建基础代码,并在此基础上进行定制化修改,如调整选择器、添加断言、设置超时等。

掌握这些基础概念之后,你可以继续深入学习如何编写复杂的自动化测试脚本,并结合Playwright的更多高级功能(如网络请求拦截、并发测试等)来优化你的测试流程。


http://www.kler.cn/news/361225.html

相关文章:

  • element-时间选择器单独写两个时间选择器并按照规则进行置灰选择,精确到时分秒
  • 黑盒测试和白盒测试的具体方法(附加实际应用中的技巧和注意事项)
  • envoyFilter导致的webSockets协议无法正常工作
  • 计算机视觉算法的演进与应用:从基础理论到前沿技术
  • Android Framework AMS(06)startActivity分析-3(补充:onPause和onStop相关流程解读)
  • Counter()函数统计元素出现频率
  • 一、rpm命令,二、yum命令
  • 力扣——用栈实现队列(C语言)
  • CryoEM - 冷冻电镜 基于深度学习的 从头重构(Ab-initio Reconstruction) 开源项目 教程
  • Redis 哨兵与集群:高可用与可扩展的解决方案
  • 2.3 朴素贝叶斯(基础分类)
  • C语言数据结构之双向链表(LIST)的实现
  • 独立构件风格
  • 二分图染色法
  • 帝国CMS – AutoTitlePic 自动生成文章标题图片插件
  • Centos7 安装 Openssl 和 Nginx
  • 微分方程(Blanchard Differential Equations 4th)中文版Exercise 1.4
  • postgresql14主从同步流复制搭建
  • 跨域问题和前端攻击
  • 【开源免费】基于SpringBoot+Vue.JS母婴商城系统 (JAVA毕业设计)
  • 【Flutter】基础组件:Container
  • 逐行讲解大模型生成解码超参数源码(temperature、top-k、top-p等)
  • 【Flutter】配置:远程开发
  • 循环移位的学习
  • 【部署篇】rabbitmq-01介绍
  • FPGA 小鸟避障游戏