網(wǎng)站首頁 編程語言 正文
實戰(zhàn)場景
本篇博客為大家介紹一款新的自動化測試工具,效果類似 selenium
,但是這個模塊年輕。
模塊名稱為 playwright-python
,微軟開源的,是針對 Python 語言的純自動化工具,可以通過 API 調(diào)用瀏覽器,github 地址在本文末尾。
接下來將通過 3 篇博客為大家詳細介紹該 playwright-python
,徹徹底底了解它。
正式開始前依舊是模塊安裝:
pip install playwright
該模塊安裝非常快,但完整體驗還需要安裝瀏覽器相關(guān)驅(qū)動,這個有點大,命令如下:
python -m playwright install
安裝時注意使用國內(nèi)源!
等待過程中,可以查閱輸出日志,核對安裝了哪些模塊:
-
Downloading FFMPEG
:FFMPEG; -
Downloading Firefox 104.0
:火狐瀏覽器驅(qū)動; -
Downloading Chromium
:谷歌瀏覽器驅(qū)動; -
Downloading Webkit 16.0
:Webkit 瀏覽器驅(qū)動。
實戰(zhàn)操作
第一次實戰(zhàn)操作,先從不寫代碼開始,通過下述命令啟動瀏覽器,然后【錄制】我們的操作過程。
python -m playwright codegen
運行代碼之后,彈出默認瀏覽器和一個代碼錄制展示框,具體如下所示:
下面就可以在左側(cè)的瀏覽器窗口中進行操作,然后觀察右側(cè)自動生成的代碼段。
在地址欄輸入 baidu.com 跳轉(zhuǎn)到百度首頁,然后輸入 航天員,點擊搜索按鈕,生成的代碼如下所示。
將生成的代碼復(fù)制到開發(fā)工具中,直接運行就可以得到剛剛相同的操作。
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
模塊導(dǎo)入 Playwright
和 sync_playwright
,看到關(guān)鍵字 sync
,可以猜測這是一個同步操作,那與之對應(yīng)的,也是未來我們要對比學習的,就是異步接口相關(guān)內(nèi)容,這里先埋下一個伏筆,下篇博客在進行討論。
browser = playwright.chromium.launch(headless=False)
初始化一個谷歌瀏覽器對象,并且不是無頭瀏覽器,即在桌面打開瀏覽器窗口。launch()
方法包含很多參數(shù),常用的有以下內(nèi)容:
-
headless
:是否為無頭瀏覽器,即是否顯示瀏覽器窗口,默認為不顯示; -
channel
:瀏覽器版本,"chrome", "chrome-beta", "chrome-dev", "chrome-canary"; -
proxy
:代理設(shè)置; -
timeout
:超時時間,默認 30s。
context = browser.new_context() page = context.new_page()
打開一個新瀏覽器,創(chuàng)建一個新頁面,其中 browser.new_context()
的參數(shù)都是與瀏覽器配置相關(guān)的內(nèi)容,實踐的時候需要特別設(shè)置的在這里設(shè)置,例如下述參數(shù):
-
user_agent
:UA 代理; -
viewport
:頁面大小,比例,例 1024*768; -
offline
:離線模式加載。
page.goto("https://www.baidu.com/") page.locator("input[name=\"wd\"]").click() …… page.wait_for_url(……)
-
goto()
:地址跳轉(zhuǎn),即瀏覽器跳轉(zhuǎn); -
locator()
:定位元素; -
wait_for_url()
:等待頁面加載完畢。
本文末尾重點介紹一下 goto()
相關(guān)內(nèi)容,剩余函數(shù)下篇博客繼續(xù)說明。 goto()
函數(shù)的重要參數(shù):
-
url
:跳轉(zhuǎn)地址,必須包含協(xié)議,例如http://
或者https://
; -
referer
:請求頭中的referer
參數(shù); -
timeout
:最大操作時間(毫秒),默認為 30 秒; -
wait_until
:默認操作成功時,執(zhí)行的內(nèi)容,還有幾個事件,分別是domcontentloaded
,networkidle
,commit
項目開源地址:https://github.com/microsoft/playwright-python
官方手冊:https://playwright.dev/python/docs/intro
原文鏈接:https://juejin.cn/post/7154188909574881310
相關(guān)推薦
- 2022-01-19 標準時間格式轉(zhuǎn)換(正則寫法)
- 2024-03-03 Element選擇年范圍,year范圍
- 2022-07-14 React?Native采用Hermes熱更新打包方案詳解_React
- 2022-09-29 Python執(zhí)行時間計算方法以及優(yōu)化總結(jié)_python
- 2022-03-29 C#加密知識整合?(AES,MD5,RSA,SHA256)_C#教程
- 2021-12-10 redis服務(wù)器cpu100%的原因和解決方案
- 2022-10-08 PostgreSQL12.5中分區(qū)表的一些操作實例_PostgreSQL
- 2022-10-12 pandas學習之df.set_index的具體使用_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支