Python中Playwright 頁面操作基礎(chǔ)的示例代碼
Playwright 的頁面操作非常強大且直觀,核心優(yōu)勢在于自動等待(Auto-waiting):大多數(shù)操作會在元素真正可交互時才執(zhí)行,無需手動添加 sleep() 或顯式等待。下面以 Node.js/TypeScript(Playwright Test 框架)為主進行講解,同時附上 Python 對應(yīng)寫法。
1.基本導航操作
// 導航到頁面
await page.goto('https://example.com');
// 刷新頁面
await page.reload();
// 前進 / 后退
await page.goBack();
await page.goForward();
2.元素定位(Locators)——最推薦方式
Playwright 強烈推薦使用 Locator 而不是直接的 page.$(),因為 Locator 是惰性求值的,支持自動等待。
// 推薦的現(xiàn)代定位方式(自動等待 + 鏈式調(diào)用)
const button = page.getByRole('button', { name: '提交' }); // 無障礙角色
const link = page.getByText('點擊這里'); // 精確文本
const partialLink = page.getByText('點擊', { exact: false }); // 部分匹配
const input = page.getByLabel('用戶名'); // 標簽關(guān)聯(lián)
const placeholder = page.getByPlaceholder('請輸入用戶名'); // placeholder
const alt = page.getByAltText('logo'); // 圖片 alt
const title = page.getByTitle('關(guān)閉'); // title 屬性
const testId = page.getByTestId('submit-btn'); // data-testid(推薦!)
const css = page.locator('#login-form input[type="password"]'); // 傳統(tǒng) CSS
3.常用交互操作
// 點擊
await page.getByRole('button', { name: '登錄' }).click();
// 雙擊 / 右鍵
await button.dblclick();
await button.click({ button: 'right' });
// 輸入文本
await page.getByLabel('用戶名').fill('admin'); // 清空后輸入(推薦)
await page.getByLabel('密碼').type('123456'); // 逐字符輸入(模擬真人)
// 清除輸入框
await input.clear();
// 勾選 / 取消勾選 Checkbox 或 Radio
await page.getByRole('checkbox', { name: '記住我' }).check();
await page.getByRole('checkbox').uncheck();
// 下拉選擇 Select
await page.getByLabel('國家').selectOption('cn'); // value 值
await page.getByLabel('國家').selectOption({ label: '中國' }); // 可見文本
await page.getByLabel('國家').selectOption({ index: 2 }); // 索引
// 上傳文件
await page.getByLabel('上傳頭像').setInputFiles('path/to/file.jpg');
// 多文件
await input.setInputFiles(['file1.jpg', 'file2.png']);
// 清除上傳
await input.setInputFiles([]);
4.鼠標與鍵盤操作
// 鼠標懸停
await page.getByText('菜單').hover();
// 拖拽
await page.locator('#source').dragTo(page.locator('#target'));
// 鍵盤操作
await page.keyboard.press('Enter');
await page.keyboard.press('Control+A'); // 組合鍵
await page.keyboard.type('Hello World'); // 輸入文本
await page.keyboard.down('Shift'); // 按住
await page.keyboard.up('Shift'); // 釋放
5.頁面信息獲取
// 獲取頁面標題和 URL
const title = await page.title();
const url = await page.url();
// 獲取元素文本
const text = await page.getByRole('heading').textContent();
const allTexts = await page.getByRole('listitem').allTextContents();
// 獲取輸入框值
const value = await page.getByLabel('用戶名').inputValue();
// 獲取屬性
const href = await page.getByRole('link').getAttribute('href');
6.截圖與錄屏
// 全頁面截圖
await page.screenshot({ path: 'full.png', fullPage: true });
// 元素截圖
await page.getByRole('button').screenshot({ path: 'button.png' });
// 錄制視頻(需在 playwright.config.ts 中啟用)
await page.video().saveAs('video.webm');
7.Python 同步版對應(yīng)示例
# 點擊
page.get_by_role("button", name="登錄").click()
# 輸入
page.get_by_label("用戶名").fill("admin")
page.get_by_label("密碼").fill("123456")
# 選擇下拉
page.get_by_label("國家").select_option("cn")
# 上傳文件
page.get_by_label("上傳").set_input_files("file.jpg")
# 截圖
page.screenshot(path="screenshot.png", full_page=True)
8.最佳實踐建議
- 優(yōu)先使用 getByRole(無障礙優(yōu)先,最穩(wěn)定)。
- 使用 data-testid 屬性進行測試專用定位(不依賴文本或結(jié)構(gòu)變化)。
- 所有操作默認自動等待,無需額外 waitFor。
- 復雜操作可鏈式調(diào)用:
await page.getByText('提交').click({ timeout: 5000 });
掌握這些基礎(chǔ)操作后,你已經(jīng)可以處理 90% 的網(wǎng)頁交互場景了!下一步建議練習:用 npx playwright codegen 錄制一個登錄流程,觀察生成的代碼。
到此這篇關(guān)于Python中Playwright 頁面操作基礎(chǔ)的示例代碼的文章就介紹到這了,更多相關(guān)Python Playwright 頁面操作 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python如何將txt文件的內(nèi)容逐行讀取轉(zhuǎn)化成數(shù)組
這篇文章主要介紹了python如何將txt文件的內(nèi)容逐行讀取轉(zhuǎn)化成數(shù)組問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
python獲取微信企業(yè)號打卡數(shù)據(jù)并生成windows計劃任務(wù)
由于公司的系統(tǒng)用的是Java版本,開通了企業(yè)號打卡之后又沒有預算讓供應(yīng)商做數(shù)據(jù)對接,所以只能自己搗鼓這個,以下是個人設(shè)置的一些內(nèi)容,僅供大家參考2019-04-04
Python基于分析Ajax請求實現(xiàn)抓取今日頭條街拍圖集功能示例
這篇文章主要介紹了Python基于分析Ajax請求實現(xiàn)抓取今日頭條街拍圖集功能,涉及Python針對今日頭條URL請求與json數(shù)據(jù)處理相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
詳解python中DRF框架的數(shù)據(jù)校驗方式
這篇文章主要為大家詳細介紹了python中DRF框架的數(shù)據(jù)校驗方式,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以跟隨小編一起了解一下2023-10-10
RuntimeError:CUDA?out?of?memory多種場景下的解決方案
若遇到RuntimeError:?CUDA?out?of?memory錯誤,通常意味著GPU內(nèi)存不足以處理當前的計算需求,本文就來介紹一下多種場景下的解決方案,具有一定的參考價值,感興趣的可以了解一下2024-02-02

