【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的更多高级功能(如网络请求拦截、并发测试等)来优化你的测试流程。

    作者:T0uken

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【Python】Playwright:环境配置与自动生成代码

    发表回复