1.簡介
這個系列的文章也講解和分享了差不多三分之一吧,突然有小夥伴或者童鞋們問道playwright有沒有截圖的方法。答案當然是:肯定有的。宏哥回過頭來看看確實這個非常基礎的知識點還沒有講解和分享。那麼在這個契機下就把它插隊分享和講解一下。Playwright提供了一個截屏的API:page.screenshot。使用該API,只需要指定截圖的圖片的保存路徑及文件名即可。如果僅指定文件名,默認保存在當前目錄。
2.截圖語法
截圖介紹官方API的文檔地址:https://playwright.dev/python/docs/screenshots
2.1截圖參數
screenshot方法可以進行截圖,參數如下:
timeout:以毫秒爲單位的超時時間,0爲禁用超時
path:設置截圖的路徑
type:圖片類型,默認jpg
quality:像素,不適用於jpg
omit_background: 隱藏默認白色背景,並允許捕獲具有透明度的屏幕截圖。不適用於“jpeg”圖像。
full_page:如果爲true,則獲取完整可滾動頁面的屏幕截圖,而不是當前可見的視口。默認爲
`假`。
clip:指定結果圖像剪裁的對象clip={'x': 10 , 'y': 10, 'width': 10, 'height': 10}
3.按照元素截圖(截取頁面一部分)
有時候,我們可能只想截取頁面的一部分,那麼,Playwright也支持將想要截取的部分篩選出來,然後調用截圖API進行截圖。參數同上,只是調用截圖方法的對象不同,快速截圖是page,按照元素截圖是page下的元素,有時截取單個元素的屏幕截圖很有用。語法如下:
page.locator(".header").screenshot(path="screenshot.png")
3.1代碼設計
使用示例,截圖百度頁面的form 表單輸入框和搜索按鈕,如下圖所示:
3.2參考代碼
# coding=utf-8🔥
# 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行
# 2.註釋:包括記錄創建時間,創建人,項目名稱。
'''
Created on 2023-11-23
@author: 北京-宏哥
公衆號:北京宏哥
Project: 《最新出爐》系列初窺篇-Python+Playwright自動化測試-36-如何截圖
'''
# 3.導入模塊
from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("https://www.baidu.com/")
element_handle = page.query_selector("#form") # 按照元素截圖
element_handle.screenshot(path="screenshot.png")
print(page.title())
page.wait_for_timeout(1000)
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
3.3運行代碼
1.運行代碼,右鍵Run'Test',控制檯輸出,如下圖所示:
2.運行代碼後電腦端的瀏覽器的動作。如下圖所示:
4.捕捉到緩衝區
使用base64對圖片數據進行加密、解密。除了可以將頁面截圖保存爲圖片之外,也可以使用base64對圖片數據進行加密和解密,將圖片轉換爲一串字符。您可以獲取包含圖像的緩衝區並對其進行後處理或將其傳遞給第三方像素差異工具,而不是寫入文件。語法如下:
screenshot_bytes = page.screenshot()
print(base64.b64encode(screenshot_bytes).decode())
4.1代碼設計
示例:截取頁面後,轉換爲一串字符並輸出。
4.2參考代碼
# coding=utf-8🔥
# 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行
# 2.註釋:包括記錄創建時間,創建人,項目名稱。
'''
Created on 2023-11-23
@author: 北京-宏哥
公衆號:北京宏哥
Project: 《最新出爐》系列初窺篇-Python+Playwright自動化測試-36-如何截圖
'''
# 3.導入模塊
import base64
from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("https://www.baidu.com/")
screenshot_bytes = page.screenshot()
print(base64.b64encode(screenshot_bytes).decode())
page.wait_for_timeout(1000)
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
4.3運行代碼
1.運行代碼,右鍵Run'Test',控制檯輸出(轉換爲一串字符並輸出),如下圖所示:
2.運行代碼後電腦端的瀏覽器的動作。如下圖所示:
4.4在線Base64轉圖片
隨便百度一個在線Base64轉圖片的地址,然後將我們上邊控制檯打印的Base64的字符串複製後,粘貼到工具裏,將其轉換成圖片看看是不是我們的截圖結果,如下圖所示:
5.小結
好了,今天時間不早了,關於playwright的截圖就先介紹講解到這裏,到此截圖基礎知識就差不多了,感謝您耐心的閱讀!!!