首頁 > 軟體

Python Playwright的使用詳解

2022-10-16 14:01:30

實戰場景

本篇部落格為大家介紹一款新的自動化測試工具,效果類似 selenium,但是這個模組年輕。

模組名稱為 playwright-python,微軟開源的,是針對 Python 語言的純自動化工具,可以通過 API 呼叫瀏覽器,github 地址在本文末尾。

接下來將通過 3 篇部落格為大家詳細介紹該 playwright-python,徹徹底底瞭解它。

正式開始前依舊是模組安裝:

pip install playwright

該模組安裝非常快,但完整體驗還需要安裝瀏覽器相關驅動,這個有點大,命令如下:

python -m playwright install

安裝時注意使用國內源!

等待過程中,可以查閱輸出紀錄檔,核對安裝了哪些模組:

  • Downloading FFMPEG:FFMPEG;
  • Downloading Firefox 104.0:火狐瀏覽器驅動;
  • Downloading Chromium :谷歌瀏覽器驅動;
  • Downloading Webkit 16.0 :Webkit 瀏覽器驅動。

實戰操作

第一次實戰操作,先從不寫程式碼開始,通過下述命令啟動瀏覽器,然後【錄製】我們的操作過程。

python -m playwright codegen

執行程式碼之後,彈出預設瀏覽器和一個程式碼錄製展示框,具體如下所示:

下面就可以在左側的瀏覽器視窗中進行操作,然後觀察右側自動生成的程式碼段。

在位址列輸入 baidu.com 跳轉到百度首頁,然後輸入 航天員,點選搜尋按鈕,生成的程式碼如下所示。

將生成的程式碼複製到開發工具中,直接執行就可以得到剛剛相同的操作。

from playwright.sync_api import Playwright, sync_playwright, expect


def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    # Open new page
    page = context.new_page()
    # Go to https://www.baidu.com/
    page.goto("https://www.baidu.com/")
    # Click input[name="wd"]
    page.locator("input[name="wd"]").click()
    # Fill input[name="wd"]
    page.locator("input[name="wd"]").fill("航天員")
    # Press Enter
    page.locator("input[name="wd"]").press("Enter")
    page.wait_for_url(
        "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E8%88%AA%E5%A4%A9%E5%91%98&fenlei=256&rsv_pq=0xfde7decb0011bfe6&rsv_t=3a67vLT%2Buti4VKw0mDppSrydbnq6CGsyOVNNxN%2F39naR6lYvxacuqvbYKRs0&rqlang=en&rsv_enter=1&rsv_dl=tb&rsv_sug3=24&rsv_sug1=24&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&prefixsug=%25E8%2588%25AA%25E5%25A4%25A9%25E5%2591%2598&rsp=5&inputT=5824&rsv_sug4=6786&rsv_jmp=fail")
    # ---------------------
    context.close()
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

接下來我們分析一下其生成的程式碼含義。

from playwright.sync_api import Playwright, sync_playwright

playwright.sync_api 模組匯入 Playwrightsync_playwright,看到關鍵字 sync,可以猜測這是一個同步操作,那與之對應的,也是未來我們要對比學習的,就是非同步介面相關內容,這裡先埋下一個伏筆,下篇部落格在進行討論。

browser = playwright.chromium.launch(headless=False)

初始化一個谷歌瀏覽器物件,並且不是無頭瀏覽器,即在桌面開啟瀏覽器視窗。launch() 方法包含很多引數,常用的有以下內容:

  • headless:是否為無頭瀏覽器,即是否顯示瀏覽器視窗,預設為不顯示;
  • channel:瀏覽器版本,"chrome", "chrome-beta", "chrome-dev", "chrome-canary";
  • proxy:代理設定;
  • timeout:超時時間,預設 30s。
context = browser.new_context()
page = context.new_page()

開啟一個新瀏覽器,建立一個新頁面,其中 browser.new_context() 的引數都是與瀏覽器設定相關的內容,實踐的時候需要特別設定的在這裡設定,例如下述引數:

  • user_agent:UA 代理;
  • viewport:頁面大小,比例,例 1024*768;
  • offline:離線模式載入。
page.goto("https://www.baidu.com/")
page.locator("input[name="wd"]").click()
……
page.wait_for_url(……)
  • goto() :地址跳轉,即瀏覽器跳轉;
  • locator():定位元素;
  • wait_for_url():等待頁面載入完畢。

本文末尾重點介紹一下 goto() 相關內容,剩餘函數下篇部落格繼續說明。 goto() 函數的重要引數:

  • url:跳轉地址,必須包含協定,例如 http:// 或者 https://
  • referer:請求頭中的 referer 引數;
  • timeout:最大操作時間(毫秒),預設為 30 秒;
  • wait_until:預設操作成功時,執行的內容,還有幾個事件,分別是 domcontentloadednetworkidlecommit

專案開源地址:https://github.com/microsoft/playwright-python

官方手冊:https://playwright.dev/python/docs/intro

到此這篇關於Python Playwright的使用詳解的文章就介紹到這了,更多相關Python Playwright內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com