Python Playwright API使用实例详解

下方查看历史精选文章

重磅发布 - 自动化框架基础指南pdfv1.1 大数据测试过程、策略及挑战

测试框架原理,构建成功的基石

在自动化测试工作之前,你应该知道的10条建议

在自动化测试中,重要的不是工具

什么是 Playwright

Playwright 是一个 Node.js 库,它提供了一个高级的 API 来自动化 Chromium、Firefox 和 WebKit 浏览器中的操作。Python Playwright API 是 Playwright 的 Python 版本,它提供了一套与 Node.js 版本相同的 API,可以在 Python 中使用。

Python Playwright API 的目标是提供一个高级的 API,使得开发者可以简单、快速地编写 Web 应用程序的自动化测试、数据爬取、表单自动填充等任务。

安装 Playwright

在使用 Python Playwright API 之前,需要先安装 Playwright。安装方法如下:

代码语言:javascript
复制
!pip install playwright

安装完成后,需要下载安装 Chromium、Firefox 和 WebKit 三种浏览器,可以使用以下命令进行下载:

代码语言:javascript
复制
from playwright import async_playwright
async def main():
    async with async_playwright() as p:
        for browser_type in [p.chromium, p.firefox, p.webkit]:
            browser = await browser_type.launch()
            page = await browser.newPage()
            await page.goto('https://example.com')
            await browser.close()
asyncio.run(main())

这个命令会自动下载并安装 Chromium、Firefox 和 WebKit 三种浏览器。

3. 使用 Playwright

使用 Python Playwright API,可以通过以下步骤在浏览器中自动执行操作:

  • 启动浏览器;
  • 打开一个页面;
  • 执行一些操作,例如点击链接、填写表单等;
  • 获取页面内容;
  • 关闭浏览器。

下面是一个示例代码,它展示了如何使用 Playwright 在浏览器中打开网页、填写表单并提交表单:

代码语言:javascript
复制
from playwright.sync_api import Playwright, Browser, Page
def run(playwright: Playwright) -> None:
    with playwright.chromium.launch() as browser:
        with browser.new_context() as context:
            with context.new_page() as page:
                page.goto('https://github.com/login')
                page.fill('#login_field', 'your-username')
                page.fill('#password', 'your-password')
                page.click('button[type="submit"]')
                # Wait for navigation to finish
                page.wait_for_selector('"#your-profile-link"')
                print(page.title())
if __name__ == '__main__':
    from playwright.sync_api import Playwright, sync_playwright
    with sync_playwright() as playwright:
        run(playwright)

这个示例代码使用 Chromium 浏览器打开 GitHub 登录页面,填写用户名和密码并点击提交按钮。然后等待页面跳转完成,并打印出当前页面的标题。

4. Playwright API 详解

4.1 浏览器操作

使用 Playwright 打开浏览器的方法如下:

代码语言:javascript
复制
from playwright.sync_api import Playwright, Browser
with playwright.chromium.launch() as browser:
    # do something

这个代码会使用 Chromium 浏览器打开一个新的浏览器窗口。

4.2 页面操作

使用 Playwright 打开页面的方法如下:

代码语言:javascript
复制
from playwright.sync_api import Playwright, Browser, Page
with browser.new_context() as context:
    with context.new_page() as page:
        page.goto('https://example.com')

这个代码会在当前浏览器中打开一个新的页面,并跳转到 example.com 网站。

4.3 等待操作

在测试中,经常需要等待页面加载完成或者等待某个元素出现。使用 Playwright,可以通过以下代码实现等待:

代码语言:javascript
复制
from playwright.sync_api import Playwright, Browser, Page
with browser.new_context() as context:
    with context.new_page() as page:
        page.goto('https://example.com')
        page.wait_for_selector('#some-element')

这个代码会等待网页中 ID 为 some-element 的元素出现后,才会继续执行后续代码。

4.4 元素操作

使用 Playwright,可以对页面中的元素进行各种操作,例如点击、填写、截图等。以下代码展示了如何对页面中的元素进行操作:

代码语言:javascript
复制

from playwright.sync_api import Playwright, Browser, Page
with browser.new_context() as context:
with context.new_page() as page:
page.goto('https://example.com')
page.fill('#username', 'your-username')
page.fill('#password', 'your-password')
page.click('#login-button')
page.screenshot(path='screenshot.png')

这个代码会在 example.com 网站中填写用户名和密码,并点击登录按钮。登录成功后,会对页面进行截图。

4.5 异步操作

Playwright 支持异步操作,可以通过以下代码实现异步操作:

代码语言:javascript
复制
from playwright.async_api import Playwright, async_playwright
async def main() -> None:
async with async_playwright() as playwright:
browser = await playwright.chromium.launch()
context = await browser.new_context()
page = await context.new_page()
await page.goto('https://example.com')
await browser.close()
asyncio.run(main())

这个代码会异步地使用 Chromium 浏览器打开 example.com 网站,并在操作完成后关闭浏览器。

5. 总结

Python Playwright API 是一个高级的自动化测试和数据爬取工具,它提供了一套与 Node.js 版本相同的 API,可以在 Python 中使用。通过 Python Playwright API,可以快速、简单地编写 Web 应用程序的自动化测试、数据爬取、表单自动填充等任务。

在本篇文章中,我们介绍了如何安装 Python Playwright API、使用 Playwright 打开浏览器和页面、等待页面加载、操作页面元素等操作。同时,我们还介绍了如何使用异步操作来提高代码执行效率。