playwright入門


最近發現了一個自動化測試的神器。
官網地址:https://playwright.dev/docs/why-playwright/

Playwright提供了一組API,可自動執行Chromium,Firefox和WebKit瀏覽器。
通過使用Playwright API,您可以編寫Python代碼來創建新的瀏覽器頁面,導航到URL,然后與頁面上的元素進行交互。
Playwright可以與測試運行程序一起用於自動進行用戶交互,以驗證和測試Web應用程序。
Playwright API通過以下原語實現此目的。

  • 打開瀏覽器
  • 瀏覽器上下文
  • 頁面和框架
  • 選擇器
  • 自動等待
  • 執行上下文:Node.js和瀏覽器
  • 對象和元素句柄

一、安裝

使用阿里源,下載速度快一點。
pip install playwright -i https://mirrors.aliyun.com/pypi/simple/

安裝Chromium、Firefox、WebKit等瀏覽器的驅動文件
python -m playwright install

二、錄制

使用Playwright無需寫一行代碼,我們只需手動操作瀏覽器,它會錄制我們的操作,然后自動生成代碼腳本。
下面就是錄制的命令codegen,僅僅一行。
python -m playwright codegen

舉例:我要在baidu.com搜索,用chromium驅動,將結果保存為my.py的python文件。

python -m playwright codegen --target python -o my.py -b chromium https://www.baidu.com

下面的例子,展示的打開百度,進行搜索。系統自動錄制操作動作,並生成python腳本

from playwright import sync_playwright

def run(playwright):
    browser = playwright.chromium.launch(headless=False)
    context = browser.newContext()

    # Open new page
    page = context.newPage()

    # Go to https://www.baidu.com/
    page.goto("https://www.baidu.com/")

    # Click input[name="wd"]
    page.click("input[name=\"wd\"]")

    # Fill input[name="wd"]
    page.fill("input[name=\"wd\"]", "寶馬汽車")

    # Go to https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E8%9A%82%E8%9A%81%E6%B2%89%E9%A6%99&fenlei=256&rsv_pq=9922438e0001e6c4&rsv_t=80e30fK9WkdiBWynXeqiNJIl80Q0ZcAuB3ZzCZU6IIcnQXPoLhm4khTU79A&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_sug3=14&rsv_sug1=16&rsv_sug7=100&rsv_btype=i&prefixsug=%25E8%259A%2582%25E8%259A%2581%25E6%25B2%2589%25E9%25A6%2599&rsp=5&inputT=6054&rsv_sug4=6670
    page.goto("https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E8%9A%82%E8%9A%81%E6%B2%89%E9%A6%99&fenlei=256&rsv_pq=9922438e0001e6c4&rsv_t=80e30fK9WkdiBWynXeqiNJIl80Q0ZcAuB3ZzCZU6IIcnQXPoLhm4khTU79A&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_sug3=14&rsv_sug1=16&rsv_sug7=100&rsv_btype=i&prefixsug=%25E8%259A%2582%25E8%259A%2581%25E6%25B2%2589%25E9%25A6%2599&rsp=5&inputT=6054&rsv_sug4=6670")

    page1 = context.newPage()
    # Go to https://zhidao.baidu.com/question/615937275180020252.html
    page1.goto("https://zhidao.baidu.com/question/615937275180020252.html")

    # Double click div[id="answer-content-1510052568"]
    page1.dblclick("div[id=\"answer-content-1510052568\"]")
    print(page1.element("div[id=\"answer-content-1510052568\"]").innertext())
    # Close page
    page1.close()

    # Close page
    page.close()

    # ---------------------
    context.close()
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

三、同步

下面示例代碼:依次打開三個瀏覽器,前往baidu搜索,截圖后退出。

from playwright import sync_playwright
with sync_playwright() as p:
for browser_type in [p.chromium, p.firefox, p.webkit]:
    browser = browser_type.launch()
    page = browser.newPage()
    page.goto('https://baidu.com/')
    page.screenshot(path=f'example-{browser_type.name}.png')
    browser.close()

四、異步

異步操作可結合asyncio同時進行三個瀏覽器操作。

import asyncio
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('http://baidu.com/')
await page.screenshot(path=f'example-{browser_type.name}.png')
await browser.close()
asyncio.get_event_loop().run_until_complete(main())


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM