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

從環(huán)境搭建到實(shí)戰(zhàn)詳解Python中Playwright的入門教程

 更新時(shí)間:2026年01月26日 08:57:25   作者:detayun  
Playwright憑借其跨瀏覽器兼容性、智能等待機(jī)制和強(qiáng)大的網(wǎng)絡(luò)控制能力,已成為開發(fā)者首選的現(xiàn)代化工具,本文將系統(tǒng)講解Python環(huán)境下Playwright的安裝配置、核心功能及實(shí)戰(zhàn)案例,幫助讀者快速掌握這一高效工具

在Web自動(dòng)化測(cè)試與爬蟲開發(fā)領(lǐng)域,Playwright憑借其跨瀏覽器兼容性、智能等待機(jī)制和強(qiáng)大的網(wǎng)絡(luò)控制能力,已成為開發(fā)者首選的現(xiàn)代化工具。本文將系統(tǒng)講解Python環(huán)境下Playwright的安裝配置、核心功能及實(shí)戰(zhàn)案例,幫助讀者快速掌握這一高效工具。

一、環(huán)境搭建:三步完成開發(fā)準(zhǔn)備

1. 系統(tǒng)要求

  • Python版本:3.8+(推薦3.10+以獲得最佳兼容性)
  • 操作系統(tǒng):Windows 10+/macOS 12+/Linux(Ubuntu 20.04+或Debian 11+)
  • 瀏覽器支持:Chromium、Firefox、WebKit(Safari內(nèi)核)

2. 安裝步驟

# 1. 安裝核心庫(推薦使用清華源加速)
pip install playwright -i https://pypi.tuna.tsinghua.edu.cn/simple

# 2. 下載瀏覽器二進(jìn)制文件(自動(dòng)匹配系統(tǒng)環(huán)境)
python -m playwright install

# 3. 安裝pytest插件(可選,用于測(cè)試框架集成)
pip install pytest-playwright

3. 驗(yàn)證安裝

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)  # 有頭模式便于調(diào)試
    page = browser.new_page()
    page.goto("https://playwright.dev")
    print(page.title())  # 應(yīng)輸出"Playwright"
    browser.close()

二、核心功能詳解:四大場(chǎng)景實(shí)戰(zhàn)

1. 基礎(chǔ)操作流程

from playwright.sync_api import sync_playwright

def test_baidu_search():
    with sync_playwright() as p:
        # 啟動(dòng)瀏覽器(無頭模式示例)
        browser = p.chromium.launch(headless=True)
        context = browser.new_context()  # 創(chuàng)建隔離環(huán)境
        page = context.new_page()
        
        # 執(zhí)行操作
        page.goto("https://www.baidu.com")
        page.fill("input[name=wd]", "Playwright教程")
        page.click("text=百度一下")
        
        # 驗(yàn)證結(jié)果
        assert "Playwright" in page.title()
        
        # 資源清理
        context.close()
        browser.close()

2. 元素定位策略(重點(diǎn)掌握)

Playwright提供五種定位方式,按推薦優(yōu)先級(jí)排序:

語義化定位(最佳實(shí)踐)

# 通過角色定位按鈕
page.get_by_role("button", name="登錄").click()

# 通過標(biāo)簽文本定位
page.get_by_text("立即購買").click()

# 通過placeholder定位輸入框
page.get_by_placeholder("請(qǐng)輸入手機(jī)號(hào)").fill("13800138000")

CSS選擇器

# ID定位
page.locator("#submit-btn").click()

# 屬性組合定位
page.locator("input[type='text'][class='form-control']").fill("test")

# 偽類選擇(定位奇數(shù)行)
page.locator("tr:nth-of-type(odd)").click()

XPath定位

# 組合條件定位
page.locator("http://input[@type='text' and contains(@placeholder,'密碼')]").fill("123456")

# 軸定位(定位父元素)
page.locator("http://button/parent::div").click()

3. 高級(jí)功能實(shí)現(xiàn)

網(wǎng)絡(luò)請(qǐng)求攔截(API模擬)

def test_api_mock():
    with sync_playwright() as p:
        browser = p.chromium.launch()
        page = browser.new_page()
        
        # 攔截特定API請(qǐng)求
        def handle_route(route):
            if "api/data" in route.request.url:
                route.fulfill(
                    status=200,
                    json={"message": "Mock數(shù)據(jù)"}
                )
            else:
                route.continue_()
        
        page.route("**/*", handle_route)
        page.goto("https://example.com")
        assert "Mock數(shù)據(jù)" in page.content()
        browser.close()

移動(dòng)設(shè)備模擬

def test_mobile_view():
    with sync_playwright() as p:
        # 使用預(yù)置設(shè)備參數(shù)
        iphone = p.devices["iPhone 12"]
        browser = p.chromium.launch()
        
        # 創(chuàng)建移動(dòng)環(huán)境
        context = browser.new_context(
            **iphone,
            locale="zh-CN",
            timezone_id="Asia/Shanghai"
        )
        
        page = context.new_page()
        page.goto("https://m.taobao.com")
        page.screenshot(path="mobile_view.png")
        context.close()
        browser.close()

三、最佳實(shí)踐:提升測(cè)試穩(wěn)定性

1. 測(cè)試組織策略

# pytest_playwright示例(conftest.py)
import pytest
from playwright.sync_api import sync_playwright

@pytest.fixture(scope="session")
def browser():
    pw = sync_playwright().start()
    browser = pw.chromium.launch(headless=True)
    yield browser
    browser.close()
    pw.stop()

def test_example(browser):
    page = browser.new_page()
    page.goto("https://bing.com")
    assert "Bing" in page.title()

2. 穩(wěn)定性保障措施

顯式等待:優(yōu)先使用page.wait_for_selector()替代硬性等待

測(cè)試ID規(guī)范:與開發(fā)約定使用data-testid屬性

<button data-testid="login-submit">登錄</button>
page.get_by_test_id("login-submit").click()

跨iframe處理

frame = page.frame_locator("iframe.login-frame")
frame.locator("#username").fill("admin")

3. 調(diào)試技巧

錄制工具:使用playwright codegen生成基礎(chǔ)代碼

playwright codegen https://example.com

可視化調(diào)試:在VS Code中安裝Playwright插件,使用"Pick Locator"工具

日志級(jí)別控制

import logging
logging.basicConfig(level=logging.INFO)  # 顯示詳細(xì)日志

四、實(shí)戰(zhàn)案例:自動(dòng)化登錄流程

from playwright.sync_api import sync_playwright
import json
import os

class QuarkDownloader:
    def __init__(self):
        self.storage_path = "state.json"
        self.quark_url = "https://quark.cn/share"
        self.username = "your_username"  # 需替換為實(shí)際用戶名

    def login_and_save_state(self):
        with sync_playwright() as p:
            browser = p.chromium.launch(headless=False)  # 顯示瀏覽器界面
            page = browser.new_page()
            
            # 訪問登錄頁
            page.goto(self.quark_url)
            
            # 等待掃碼登錄(實(shí)際項(xiàng)目中需替換為具體登錄邏輯)
            page.wait_for_selector(f"span:text('{self.username}')")
            
            # 保存瀏覽器狀態(tài)
            storage_state = browser.new_context().storage_state()
            with open(self.storage_path, "w") as f:
                json.dump(storage_state, f)
            
            browser.close()

    def download_file(self, share_url, extract_code):
        if not os.path.exists(self.storage_path):
            self.login_and_save_state()

        with sync_playwright() as p:
            browser = p.chromium.launch(headless=True)
            context = browser.new_context(storage_state=self.storage_path)
            page = context.new_page()
            
            # 監(jiān)聽下載事件
            def handle_download(route):
                if "download" in route.request.url:
                    route.continue_()
            
            page.route("**/*", handle_download)
            
            # 訪問分享鏈接
            page.goto(share_url)
            page.fill("input[placeholder='提取碼']", extract_code)
            page.click("text=提取文件")
            
            # 等待下載完成(實(shí)際項(xiàng)目中需根據(jù)具體下載邏輯調(diào)整)
            page.wait_for_timeout(10000)
            
            context.close()
            browser.close()

# 使用示例
downloader = QuarkDownloader()
downloader.download_file(
    share_url="https://quark.cn/share/xxxxxx",  # 替換為實(shí)際分享鏈接
    extract_code="1234"  # 替換為實(shí)際提取碼
)

五、總結(jié)與展望

Playwright通過其現(xiàn)代化的架構(gòu)設(shè)計(jì),解決了傳統(tǒng)自動(dòng)化工具的三大痛點(diǎn):

  • 跨瀏覽器一致性:統(tǒng)一API適配Chromium/Firefox/WebKit
  • 智能等待機(jī)制:自動(dòng)處理元素加載狀態(tài)
  • 網(wǎng)絡(luò)控制能力:支持請(qǐng)求攔截與修改

對(duì)于Python開發(fā)者而言,掌握Playwright不僅能提升測(cè)試效率,還能為爬蟲開發(fā)提供新的解決方案。建議從語義化定位開始實(shí)踐,逐步掌握網(wǎng)絡(luò)攔截和移動(dòng)模擬等高級(jí)功能,最終構(gòu)建出健壯的自動(dòng)化測(cè)試體系。

以上就是從環(huán)境搭建到實(shí)戰(zhàn)詳解Python中Playwright的入門教程的詳細(xì)內(nèi)容,更多關(guān)于Python Playwright使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • PyTorch 張量的基本操作

    PyTorch 張量的基本操作

    PyTorch張量是PyTorch中核心數(shù)據(jù)結(jié)構(gòu),類似于 NumPy 的 ndarray,但具有 GPU 加速能力,下面就來詳細(xì)的介紹一下PyTorch 張量的基本操作,感興趣的可以了解一下
    2025-12-12
  • python設(shè)置中文界面實(shí)例方法

    python設(shè)置中文界面實(shí)例方法

    在本篇文章里小編給大家整理的是關(guān)于python設(shè)置中文界面實(shí)例方法,有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-10-10
  • Python使用pymeter操作JMeter的教程詳解

    Python使用pymeter操作JMeter的教程詳解

    pymeter?是一個(gè)?Python?庫,它可以以編程方式創(chuàng)建和運(yùn)行?JMeter?測(cè)試計(jì)劃,下面就跟隨小編一起來看看Python如何使用pymeter操作JMeter的吧
    2024-01-01
  • python自定義函數(shù)實(shí)現(xiàn)一個(gè)數(shù)的三次方計(jì)算方法

    python自定義函數(shù)實(shí)現(xiàn)一個(gè)數(shù)的三次方計(jì)算方法

    今天小編就為大家分享一篇python自定義函數(shù)實(shí)現(xiàn)一個(gè)數(shù)的三次方計(jì)算方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python生成不重復(fù)隨機(jī)數(shù)和對(duì)list亂序的解決方法

    python生成不重復(fù)隨機(jī)數(shù)和對(duì)list亂序的解決方法

    下面小編就為大家分享一篇python生成不重復(fù)隨機(jī)數(shù)和對(duì)list亂序的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python添加模塊搜索路徑和包的導(dǎo)入方法

    python添加模塊搜索路徑和包的導(dǎo)入方法

    今天小編就為大家分享一篇python添加模塊搜索路徑和包的導(dǎo)入方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python 如何解決稀疏矩陣運(yùn)算

    Python 如何解決稀疏矩陣運(yùn)算

    這篇文章主要介紹了Python 解決稀疏矩陣運(yùn)算的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2021-05-05
  • Python實(shí)現(xiàn)屏幕截圖的代碼及函數(shù)詳解

    Python實(shí)現(xiàn)屏幕截圖的代碼及函數(shù)詳解

    本文給大家分享一段關(guān)于python實(shí)現(xiàn)屏幕截圖及函數(shù)的代碼,代碼簡單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-10-10
  • pandas的分箱操作實(shí)現(xiàn)

    pandas的分箱操作實(shí)現(xiàn)

    本文主要介紹了在pandas中使用pd.cut()和pd.qcut()方法進(jìn)行數(shù)據(jù)分箱的操作,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • 解決Python3中二叉樹前序遍歷的迭代問題

    解決Python3中二叉樹前序遍歷的迭代問題

    二叉樹是分層數(shù)據(jù)結(jié)構(gòu),其中每個(gè)父節(jié)點(diǎn)最多有 2 個(gè)子節(jié)點(diǎn),在今天的文章中,我們將討論一個(gè)在大量技術(shù)編碼面試中出現(xiàn)的重要主題,對(duì)Python二叉樹遍歷相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-09-09

最新評(píng)論

渭南市| 西青区| 庐江县| 肥东县| 亚东县| 双鸭山市| 和政县| 海兴县| 闽侯县| 扶沟县| 南城县| 行唐县| 乌拉特中旗| 景泰县| 邢台市| 黄山市| 绵竹市| 南雄市| 靖边县| 吐鲁番市| 遵化市| 鄯善县| 新晃| 苗栗县| 宁晋县| 台北市| 六枝特区| 焉耆| 本溪市| 兰坪| 玛曲县| 麻栗坡县| 裕民县| 台东县| 泸定县| 徐闻县| 穆棱市| 紫云| 南雄市| 怀安县| 万山特区|