Python?Playwright進(jìn)行常見的頁(yè)面交互操作
在使用 Playwright 進(jìn)行 Web 自動(dòng)化時(shí),頁(yè)面交互是核心操作之一。無論是訪問頁(yè)面、等待元素加載、截圖,還是自動(dòng)填寫表單,Playwright 提供了豐富的 API 來幫助實(shí)現(xiàn)這些功能。本文將詳細(xì)介紹如何使用 Playwright 進(jìn)行常見的頁(yè)面交互操作,并深入理解瀏覽器上下文和其在處理登錄和會(huì)話管理中的應(yīng)用。
訪問頁(yè)面:goto()
goto() 方法是 Playwright 中訪問網(wǎng)頁(yè)的主要方法。它不僅可以用于簡(jiǎn)單的頁(yè)面導(dǎo)航,還支持許多高級(jí)選項(xiàng),如處理頁(yè)面跳轉(zhuǎn)和超時(shí)等。
基礎(chǔ)使用
通過 page.goto() 方法,你可以導(dǎo)航到一個(gè)指定的 URL。Playwright 會(huì)等待頁(yè)面的主要內(nèi)容加載完成后繼續(xù)執(zhí)行后續(xù)操作。
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless=False) # 啟動(dòng)瀏覽器 page = browser.new_page() # 打開新的頁(yè)面 page.goto('https://example.com') # 訪問網(wǎng)頁(yè) print(page.title()) # 輸出頁(yè)面標(biāo)題 browser.close()
上面的代碼會(huì)在瀏覽器中打開 https://example.com 并輸出頁(yè)面的標(biāo)題。
高級(jí)選項(xiàng)
你可以為 goto() 方法提供更多選項(xiàng)來控制頁(yè)面加載行為:
- timeout:設(shè)定超時(shí)時(shí)間(以毫秒為單位),超過該時(shí)間會(huì)拋出錯(cuò)誤。
- wait_until:設(shè)定頁(yè)面加載完成的條件,如 load(等待完全加載)、domcontentloaded(等待 DOM 內(nèi)容加載)、networkidle(等待網(wǎng)絡(luò)空閑)等。
示例:
page.goto('https://example.com', timeout=10000, wait_until='networkidle')
這個(gè)示例中,goto() 方法會(huì)等待網(wǎng)絡(luò)空閑,并設(shè)置10秒的超時(shí)時(shí)間。
等待元素加載:wait_for_selector()
在頁(yè)面加載的過程中,某些元素可能并不會(huì)立刻呈現(xiàn)。這時(shí),使用 wait_for_selector() 方法可以幫助我們等待特定元素的出現(xiàn)或消失。
基礎(chǔ)使用
wait_for_selector() 等待頁(yè)面中的某個(gè)元素出現(xiàn)后,才會(huì)繼續(xù)執(zhí)行后續(xù)操作。
page.goto('https://example.com') page.wait_for_selector('h1') # 等待 h1 元素出現(xiàn) print(page.title())
在上面的代碼中,Playwright 會(huì)等待頁(yè)面中的 <h1> 元素加載完成后再輸出頁(yè)面的標(biāo)題。
高級(jí)使用
你可以為 wait_for_selector() 添加更多參數(shù)來指定條件,如:
- state:可以指定等待元素的狀態(tài),如 visible、hidden、attached、detached。
- timeout:設(shè)置等待的超時(shí)時(shí)間,超時(shí)則會(huì)拋出異常。
例如,等待某個(gè)按鈕變?yōu)榭梢姞顟B(tài):
page.wait_for_selector('button#submit', state='visible', timeout=5000)
頁(yè)面截圖:screenshot()
Playwright 提供了內(nèi)置的 screenshot() 方法,可以非常方便地對(duì)當(dāng)前頁(yè)面或特定元素進(jìn)行截圖操作。
頁(yè)面截圖
你可以使用 screenshot() 方法為整個(gè)頁(yè)面截圖,并將截圖保存為 PNG 文件。
page.goto('https://example.com') page.screenshot(path='example.png') # 保存截圖
元素截圖
如果你只想對(duì)頁(yè)面中的某個(gè)特定元素進(jìn)行截圖,也可以通過 screenshot() 方法實(shí)現(xiàn)。使用 locator() 選擇元素后,再調(diào)用 screenshot():
element = page.locator('h1') element.screenshot(path='element.png')
這會(huì)將頁(yè)面中的 <h1> 元素截圖并保存為 element.png 文件。
高級(jí)選項(xiàng)
screenshot() 方法還提供一些有用的參數(shù),如:
- full_page:如果為 True,Playwright 會(huì)截取整個(gè)頁(yè)面,包括頁(yè)面滾動(dòng)后的部分。
- quality:可以指定JPEG截圖的質(zhì)量(PNG格式不支持)。
page.screenshot(path='example.png', full_page=True)
填充表單:fill()
fill() 是 Playwright 用來自動(dòng)填寫表單輸入框的方法,它接受兩個(gè)參數(shù):選擇器和輸入的值。
基礎(chǔ)使用
以下代碼示例展示了如何填寫一個(gè)登錄表單:
page.goto('https://example.com/login') page.fill('input[name="username"]', 'myusername') # 填寫用戶名 page.fill('input[name="password"]', 'mypassword') # 填寫密碼 page.click('button[type="submit"]') # 提交表單
填寫下拉菜單和復(fù)選框
對(duì)于復(fù)選框和下拉菜單,Playwright 提供了 check() 和 select_option() 方法。
復(fù)選框操作:
page.check('input[name="agree"]') # 勾選復(fù)選框
下拉菜單操作:
page.select_option('select[name="options"]', 'value1') # 選擇下拉菜單中的某個(gè)選項(xiàng)
瀏覽器上下文:處理登錄或會(huì)話管理
瀏覽器上下文(Browser Context) 是 Playwright 中的一個(gè)強(qiáng)大功能,它允許我們?cè)谕粸g覽器實(shí)例中創(chuàng)建多個(gè)獨(dú)立的會(huì)話環(huán)境。每個(gè)上下文有自己的 cookie、緩存和本地存儲(chǔ),因此可以獨(dú)立地處理多個(gè)用戶會(huì)話或窗口。
創(chuàng)建新的瀏覽器上下文
通過 browser.new_context() 方法可以創(chuàng)建一個(gè)新的上下文,每個(gè)上下文都是彼此獨(dú)立的。
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch() # 創(chuàng)建用戶1的上下文 context1 = browser.new_context() page1 = context1.new_page() page1.goto('https://example.com/login') # 創(chuàng)建用戶2的上下文 context2 = browser.new_context() page2 = context2.new_page() page2.goto('https://example.com/login') browser.close()
在上面的代碼中,我們?yōu)閮蓚€(gè)用戶創(chuàng)建了獨(dú)立的上下文,每個(gè)上下文可以在相同的瀏覽器實(shí)例中運(yùn)行,而不會(huì)共享 session、cookie 或本地存儲(chǔ)。
上下文的實(shí)際應(yīng)用:登錄持久化
有時(shí)候,我們需要在不同的測(cè)試中保留登錄狀態(tài),這時(shí)可以使用上下文的 storage_state 來保存和加載會(huì)話。
保存會(huì)話狀態(tài):
context = browser.new_context() page = context.new_page() page.goto('https://example.com/login') # 模擬登錄 page.fill('input[name="username"]', 'myusername') page.fill('input[name="password"]', 'mypassword') page.click('button[type="submit"]') # 保存登錄狀態(tài) context.storage_state(path='auth.json')
加載會(huì)話狀態(tài):
context = browser.new_context(storage_state='auth.json') # 加載之前保存的登錄狀態(tài) page = context.new_page() page.goto('https://example.com/dashboard') # 直接進(jìn)入登錄后的頁(yè)面
使用上下文的 storage_state() 方法,可以保存當(dāng)前會(huì)話中的 cookie 和本地存儲(chǔ),并在后續(xù)測(cè)試中加載這些數(shù)據(jù),實(shí)現(xiàn)無縫的登錄持久化。
總結(jié)
本文介紹了如何使用 Playwright 進(jìn)行基礎(chǔ)的頁(yè)面交互,包括訪問頁(yè)面、等待元素加載、頁(yè)面截圖以及填充表單等操作。同時(shí),我們還詳細(xì)探討了瀏覽器上下文的概念,以及如何利用它處理多用戶登錄和會(huì)話管理。通過這些基本操作,你可以構(gòu)建功能豐富的自動(dòng)化腳本,并且在測(cè)試中處理復(fù)雜的用戶會(huì)話。
到此這篇關(guān)于Python Playwright進(jìn)行常見的頁(yè)面交互操作的文章就介紹到這了,更多相關(guān)Python Playwright頁(yè)面交互內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 使用Playwright模擬API的項(xiàng)目實(shí)踐
- Python自動(dòng)化神器Playwright的用法詳解
- Python寫UI自動(dòng)化之playwright(點(diǎn)擊操作)詳解
- 深入理解Playwright的高級(jí)功能和用法
- Python中playwright啟動(dòng)瀏覽器與常見運(yùn)行方式詳解
- Python中Playwright模塊進(jìn)行自動(dòng)化測(cè)試的實(shí)現(xiàn)
- 使用Python中的Playwright制作測(cè)試視頻的實(shí)現(xiàn)步驟
- python+playwright 元素操作示例代碼
- 使用Playwright進(jìn)行視覺回歸測(cè)試詳解
- python playwright--pytest-playwright、pytest-base-url插件編寫用例
- Playwright 跟蹤查看器的高級(jí)用法
相關(guān)文章
Python 代碼實(shí)現(xiàn)列表的最小公倍數(shù)
這篇文章主要介紹了Python 代碼實(shí)現(xiàn)列表的最小公倍數(shù),代碼實(shí)現(xiàn)了計(jì)算列表中元素的最小公倍數(shù)的功能,包括公式介紹,需要的朋友可以參考一下2021-11-11Python隨機(jī)數(shù)random模塊使用指南
本文給大家分享的是Python隨機(jī)數(shù)random模塊的幾個(gè)常用的方法,非常的簡(jiǎn)單,小伙伴們喜歡的話,后續(xù)繼續(xù)深入探討2016-09-09Python+matplotlib+numpy繪制精美的條形統(tǒng)計(jì)圖
這篇文章主要介紹了Python+matplotlib+numpy繪制精美的條形統(tǒng)計(jì)圖,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01python3+selenium自動(dòng)化測(cè)試框架詳解
在本篇文章里小編給大家分享了關(guān)于python3+selenium自動(dòng)化測(cè)試框架的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。2019-03-03Python中bytes字節(jié)串和string字符串之間的轉(zhuǎn)換方法
python中字節(jié)字符串不能格式化,獲取到的網(wǎng)頁(yè)有時(shí)候是字節(jié)字符串,需要轉(zhuǎn)化后再解析,下面這篇文章主要給大家介紹了關(guān)于Python中bytes字節(jié)串和string字符串之間的轉(zhuǎn)換方法,需要的朋友可以參考下2022-01-01Python驗(yàn)證碼截取識(shí)別代碼實(shí)例
這篇文章主要介紹了Python驗(yàn)證碼截取識(shí)別代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05Python入門教程1. 基本運(yùn)算【四則運(yùn)算、變量、math模塊等】
這篇文章主要介紹了Python教程的基本運(yùn)算,包括四則運(yùn)算、變量的使用與類型檢測(cè)、math模塊等,并附帶了相關(guān)說明,代碼備有較為詳盡的說明,便于理解,需要的朋友可以參考下2018-10-10對(duì)python中的six.moves模塊的下載函數(shù)urlretrieve詳解
今天小編就為大家分享一篇對(duì)python中的six.moves模塊的下載函數(shù)urlretrieve詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12