最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中Playwright 數(shù)據(jù)提取和驗(yàn)證

 更新時(shí)間:2026年01月23日 09:10:11   作者:yingjuxia.com  
Playwright 提供了強(qiáng)大的數(shù)據(jù)提取和驗(yàn)證功能,支持多種語言,通過 Locator API 可提取元素文本、屬性值、輸入框內(nèi)容等數(shù)據(jù),具有一定的參考價(jià)值,感興趣的可以了解一下

數(shù)據(jù)提?。‥xtraction)和驗(yàn)證(Assertion)是 Playwright 在自動化測試和爬蟲場景中最核心的部分。Playwright 提供了強(qiáng)大且可靠的 Locator APIWeb-First 斷言,能自動等待元素就緒,確保測試穩(wěn)定。下面以 Node.js/TypeScript(Playwright Test)為主,附 Python 示例。

1.數(shù)據(jù)提?。ǔR姺绞剑?/h2>
提取目標(biāo)代碼示例(推薦 Locator)說明
單個(gè)元素文本const text = await page.getByRole('heading', { name: '歡迎' }).textContent();返回字符串(null 如果不存在)
輸入框值const value = await page.getByLabel('用戶名').inputValue();適用于 input/textarea
屬性值const href = await page.getByRole('link', { name: '詳情' }).getAttribute('href');獲取 href、src、data-* 等
多個(gè)元素文本const items = await page.getByRole('listitem').allTextContents();返回 string[] 數(shù)組
多個(gè)元素內(nèi)文本const texts = await page.getByTestId('price').allInnerTexts();innerText(不含子元素隱藏文本)
元素計(jì)數(shù)const count = await page.getByRole('article').count();返回元素?cái)?shù)量
表格數(shù)據(jù)提取```const
JSON/API 數(shù)據(jù)const response = await page.waitForResponse('**/api/users');
const json = await response.json();
攔截網(wǎng)絡(luò)響應(yīng)提取數(shù)據(jù)

2.驗(yàn)證(斷言)——Playwright 最強(qiáng)大特性

Playwright 的 expectWeb-First 斷言:會自動重試直到超時(shí)(默認(rèn) 30s),極大減少 flaky 測試。

import { test, expect } from '@playwright/test';

// 頁面標(biāo)題
await expect(page).toHaveTitle('Playwright - 首頁');
await expect(page).toHaveTitle(/Playwright/);  // 正則匹配

// URL
await expect(page).toHaveURL('https://playwright.dev/');
await expect(page).toHaveURL(/docs/);

// 元素可見/隱藏
await expect(page.getByText('加載成功')).toBeVisible();
await expect(page.getByText('加載中')).toBeHidden();

// 元素文本
await expect(page.getByRole('heading')).toHaveText('歡迎使用');
await expect(page.getByTestId('status')).toContainText('成功');  // 包含

// 元素屬性
await expect(page.getByRole('link')).toHaveAttribute('href', '/docs');
await expect(page.getByRole('img')).toHaveAttribute('src', /logo/);

// 輸入框值
await expect(page.getByLabel('搜索')).toHaveValue('Playwright');

// 元素?cái)?shù)量
await expect(page.getByRole('listitem')).toHaveCount(5);

// Checkbox/Radio 狀態(tài)
await expect(page.getByRole('checkbox')).toBeChecked();
await expect(page.getByRole('radio', { name: '男' })).toBeChecked();

// 元素啟用/禁用
await expect(page.getByRole('button')).toBeEnabled();
await expect(page.getByRole('button')).toBeDisabled();

3.高級驗(yàn)證技巧

// 軟斷言(不立即失敗,繼續(xù)執(zhí)行)
expect.soft(page.getByText('錯(cuò)誤提示')).toBeHidden();

// 自定義超時(shí)
await expect(page.getByText('加載完成'), { timeout: 10000 }).toBeVisible();

// 輪詢斷言(復(fù)雜條件)
await expect(async () => {
  const count = await page.getByRole('listitem').count();
  expect(count).toBeGreaterThan(0);
}).toPass({ timeout: 15000 });

// 截圖斷言(視覺回歸)
await expect(page).toHaveScreenshot('homepage.png', { maxDiffPixels: 100 });

// 全頁面截圖比較(像素級)
await expect(page).toHaveScreenshot({ fullPage: true });

4.實(shí)戰(zhàn)示例:提取并驗(yàn)證搜索結(jié)果

test('百度搜索 Playwright 并驗(yàn)證結(jié)果', async ({ page }) => {
  await page.goto('https://www.baidu.com');
  await page.getByLabel('搜索輸入框').fill('Playwright');
  await page.getByRole('button', { name: '百度一下' }).click();

  // 等待結(jié)果加載
  await page.waitForLoadState('networkidle');

  // 提取第一個(gè)結(jié)果標(biāo)題
  const firstTitle = await page.getByRole('heading').first().textContent();
  console.log('第一個(gè)結(jié)果標(biāo)題:', firstTitle);

  // 驗(yàn)證結(jié)果包含關(guān)鍵詞
  await expect(page.getByRole('heading').first()).toContainText('Playwright');
  await expect(page.getByRole('heading')).toHaveCount(10);  // 通常一頁 10 條

  // 提取所有結(jié)果鏈接
  const links = await page.getByRole('link', { name: /Playwright/ }).all();
  console.log(`找到 ${links.length} 個(gè)相關(guān)鏈接`);
});

5.Python 版提取與驗(yàn)證示例

from playwright.sync_api import sync_playwright, expect

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    page.goto("https://playwright.dev")

    # 提取
    title = page.title()
    heading = page.get_by_role("heading", name="Fast and reliable").text_content()
    print(f"標(biāo)題: {title}, 副標(biāo)題: {heading}")

    # 驗(yàn)證
    expect(page).to_have_title("Playwright")
    expect(page.get_by_role("link", name="Get started")).to_be_visible()
    expect(page.get_by_text("Playwright is a")).to_contain_text("reliable")

    browser.close()

最佳實(shí)踐總結(jié)

  • 提取:優(yōu)先用 getByRole + textContent() / inputValue()。
  • 驗(yàn)證:全部使用 expect(),讓 Playwright 自動重試。
  • 測試專用屬性:在被測應(yīng)用中添加 data-testid="xxx",最穩(wěn)定。
  • 調(diào)試:失敗時(shí)自動生成 trace(截圖 + 視頻 + 網(wǎng)絡(luò)日志),用 npx playwright show-trace 查看。

到此這篇關(guān)于python中Playwright 數(shù)據(jù)提取和驗(yàn)證的文章就介紹到這了,更多相關(guān)Playwright 數(shù)據(jù)提取和驗(yàn)證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽

相關(guān)文章

  • Django def clean()函數(shù)對表單中的數(shù)據(jù)進(jìn)行驗(yàn)證操作

    Django def clean()函數(shù)對表單中的數(shù)據(jù)進(jìn)行驗(yàn)證操作

    這篇文章主要介紹了Django def clean()函數(shù)對表單中的數(shù)據(jù)進(jìn)行驗(yàn)證操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 用yum安裝MySQLdb模塊的步驟方法

    用yum安裝MySQLdb模塊的步驟方法

    在python2.7版本中,MySQLdb模塊還不是python的內(nèi)置模塊,但是MySQLdb模塊又是Python與MySQL連接的橋梁,對于作為MySQL DBA又很喜歡Python語言的我來說,MySQLdb真的是必需品呢。所以就需要自己進(jìn)行安裝了,這篇文章就給大家詳細(xì)介紹了關(guān)于用yum安裝MySQLdb模塊的步驟。
    2016-12-12
  • python正則表達(dá)式實(shí)例代碼

    python正則表達(dá)式實(shí)例代碼

    這篇文章主要介紹了python正則表達(dá)式的一些實(shí)例代碼,方便學(xué)習(xí)python的朋友,需要的朋友可以參考下
    2020-03-03
  • python實(shí)現(xiàn)遍歷文件夾圖片并重命名

    python實(shí)現(xiàn)遍歷文件夾圖片并重命名

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)遍歷文件夾圖片并重命名,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 使用Python手搓一個(gè)生產(chǎn)級限流器

    使用Python手搓一個(gè)生產(chǎn)級限流器

    這篇文章主要為大家詳細(xì)介紹了三種生產(chǎn)級限流算法的Python實(shí)現(xiàn),即令牌桶,漏桶和滑動窗口,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2026-02-02
  • Python編寫郵件自動發(fā)送工具的完整指南

    Python編寫郵件自動發(fā)送工具的完整指南

    自動化郵件發(fā)送是一個(gè)非常實(shí)用的功能,無論是系統(tǒng)通知,營銷郵件,還是日常工作報(bào)告,下面我們來看看Python如何使用smtplib實(shí)現(xiàn)郵件自動發(fā)送工具吧
    2025-06-06
  • Python使用matplotlib填充圖形指定區(qū)域代碼示例

    Python使用matplotlib填充圖形指定區(qū)域代碼示例

    這篇文章主要介紹了Python使用matplotlib填充圖形指定區(qū)域代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Python使用py2exe打包程序介紹

    Python使用py2exe打包程序介紹

    這篇文章主要介紹了Python使用py2exe打包程序介紹,本文講解了py2exe簡介、安裝、用法、指定額外文件等內(nèi)容,需要的朋友可以參考下
    2014-11-11
  • Python3.4解釋器用法簡單示例

    Python3.4解釋器用法簡單示例

    這篇文章主要介紹了Python3.4解釋器用法,結(jié)合簡單實(shí)例形式分析了Windows與Linux系統(tǒng)環(huán)境中Python3.4解釋器的簡單使用方法,需要的朋友可以參考下
    2019-03-03
  • 詳解Python多線程Selenium跨瀏覽器測試

    詳解Python多線程Selenium跨瀏覽器測試

    本篇文章主要介紹了Python多線程Selenium跨瀏覽器測試,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-04-04

最新評論

开封县| 云林县| 凤冈县| 南汇区| 名山县| 叙永县| 湘西| 新营市| 邳州市| 中西区| 台东县| 平泉县| 大姚县| 梧州市| 黄大仙区| 黄山市| 监利县| 太仆寺旗| 渭南市| 达日县| 澄江县| 临沂市| 德化县| 额敏县| 肇源县| 临西县| 称多县| 东海县| 焦作市| 施秉县| 图木舒克市| 内江市| 武安市| 南京市| 崇仁县| 礼泉县| 若羌县| 察哈| 阜宁县| 明水县| 黑龙江省|