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

Java中Playwright 應(yīng)用入門從基礎(chǔ)到實(shí)踐

 更新時(shí)間:2025年09月02日 11:32:00   作者:超齡超能程序猿  
Playwright是微軟開發(fā)的開源自動(dòng)化工具,專注于現(xiàn)代Web應(yīng)用的端到端測(cè)試、網(wǎng)頁(yè)爬取和瀏覽器自動(dòng)化,本文給大家介紹Java中Playwright 應(yīng)用入門從基礎(chǔ)到實(shí)踐,感興趣的朋友跟隨小編一起看看吧

Playwright 應(yīng)用入門:從基礎(chǔ)到實(shí)踐

Playwright 是微軟開發(fā)的開源自動(dòng)化工具,專注于現(xiàn)代 Web 應(yīng)用的端到端測(cè)試、網(wǎng)頁(yè)爬取和瀏覽器自動(dòng)化。它支持 Chromium(Chrome/Edge)、Firefox、WebKit(Safari)三大瀏覽器,提供跨語(yǔ)言 API(Java、Python、JavaScript 等),以自動(dòng)等待、強(qiáng)大的元素定位穩(wěn)定的交互能力著稱。

一、核心優(yōu)勢(shì)與適用場(chǎng)景

  • 跨瀏覽器兼容:一套代碼可在 Chromium、Firefox、WebKit 上運(yùn)行,無(wú)需修改。
  • 自動(dòng)等待機(jī)制:無(wú)需手動(dòng)添加 sleep,自動(dòng)等待元素可交互后再執(zhí)行操作(解決 90% 的“元素未就緒”問(wèn)題)。
  • 強(qiáng)大的定位能力:支持 CSS、XPath、文本、屬性等多種定位方式,且支持鏈?zhǔn)蕉ㄎ弧?/li>
  • 隔離性:通過(guò) BrowserContext 實(shí)現(xiàn)會(huì)話隔離(類似隱私模式),適合多用戶場(chǎng)景。
  • 適用場(chǎng)景:Web 自動(dòng)化測(cè)試、網(wǎng)頁(yè)數(shù)據(jù)爬取、表單自動(dòng)提交、UI 交互驗(yàn)證等。

二、入門步驟(以 Java 為例)

1. 環(huán)境準(zhǔn)備

需安裝:

  • JDK 8+(Playwright 對(duì) Java 版本有要求)
  • 構(gòu)建工具(Maven 或 Gradle)

2. 依賴配置

pom.xml(Maven)中添加依賴:

<dependencies>
    <!-- Playwright 核心依賴 -->
    <dependency>
        <groupId>com.microsoft.playwright</groupId>
        <artifactId>playwright</artifactId>
        <version>1.40.0</version>  <!-- 建議使用最新版本 -->
    </dependency>
</dependencies>

3. 下載瀏覽器驅(qū)動(dòng)

Playwright 需要對(duì)應(yīng)瀏覽器的驅(qū)動(dòng)文件,首次使用需下載(僅需執(zhí)行一次):

import com.microsoft.playwright.Playwright;
public class InstallDrivers {
    public static void main(String[] args) {
        Playwright.install();  // 下載 Chromium、Firefox、WebKit 驅(qū)動(dòng)
    }
}

三、入門代碼示例:完整流程

以下示例實(shí)現(xiàn)一個(gè)典型場(chǎng)景:?jiǎn)?dòng)瀏覽器 → 打開網(wǎng)頁(yè) → 執(zhí)行交互(輸入、點(diǎn)擊)→ 截圖 → 關(guān)閉資源。

代碼解析:

  1. 資源管理:使用 try-with-resources 包裹 Playwright 實(shí)例,確保程序結(jié)束后自動(dòng)釋放資源(避免瀏覽器進(jìn)程殘留)。
  2. 瀏覽器啟動(dòng)setHeadless(false) 用于調(diào)試(可見瀏覽器窗口),生產(chǎn)環(huán)境建議設(shè)為 true(無(wú)頭模式,更高效)。
  3. 元素定位:通過(guò) page.locator(selector) 定位元素,支持 CSS 選擇器(如 #kw 表示 id 為 kw 的元素)、XPath 等。
  4. 自動(dòng)等待fill()、click() 等方法會(huì)自動(dòng)等待元素出現(xiàn)并可交互,無(wú)需手動(dòng)添加 Thread.sleep()。

四、運(yùn)行結(jié)果

執(zhí)行代碼后,會(huì):

  • 彈出 Chromium 瀏覽器窗口,自動(dòng)打開百度。
  • 在搜索框輸入“Playwright 入門”并點(diǎn)擊搜索。
  • 等待頁(yè)面加載完成后,截取全頁(yè)截圖并保存為 search_result.png。

五、常見問(wèn)題及解決方案

1. 依賴下載失?。∕aven/Gradle 報(bào)錯(cuò))

現(xiàn)象pom.xml 中添加依賴后,構(gòu)建時(shí)提示“無(wú)法下載 playwright.jar”。
原因:網(wǎng)絡(luò)問(wèn)題或倉(cāng)庫(kù)配置錯(cuò)誤。
解決

  • 檢查網(wǎng)絡(luò)連接,確保能訪問(wèn) Maven 中央倉(cāng)庫(kù)。
  • 手動(dòng)指定倉(cāng)庫(kù)(在 pom.xml 中添加):
    <repositories>
        <repository>
            <id>central</id>
            <url>https://repo1.maven.org/maven2/</url>
        </repository>
    </repositories>

2. 瀏覽器驅(qū)動(dòng)下載失敗(Playwright.install() 報(bào)錯(cuò))

現(xiàn)象:執(zhí)行 Playwright.install() 時(shí)拋出“下載超時(shí)”或“無(wú)法連接服務(wù)器”。
原因:網(wǎng)絡(luò)限制(如國(guó)內(nèi)訪問(wèn) GitHub 困難)。
解決

  • 使用代理下載:
    // 執(zhí)行前設(shè)置代理環(huán)境變量(示例:HTTP 代理)
    System.setProperty("http.proxyHost", "127.0.0.1");
    System.setProperty("http.proxyPort", "1080");
    Playwright.install();
    
  • 手動(dòng)下載驅(qū)動(dòng):從 Playwright 驅(qū)動(dòng)倉(cāng)庫(kù) 下載對(duì)應(yīng)版本的驅(qū)動(dòng),解壓后放在 ~/.cache/ms-playwright/ 目錄(Windows 為 C:\Users\<用戶名>\AppData\Local\ms-playwright\)。

3. 元素定位失?。?code>Locator 操作拋出異常)

現(xiàn)象fill()click() 時(shí)提示“元素未找到”或“超時(shí)”。
原因

  • 選擇器錯(cuò)誤(如 CSS 選擇器拼寫錯(cuò)誤)。
  • 元素是動(dòng)態(tài)加載的(如通過(guò) JavaScript 渲染,延遲出現(xiàn))。
  • 元素在 iframe 中(需先切換到 iframe)。

解決

  • 檢查選擇器:在瀏覽器開發(fā)者工具(F12)的“Elements”面板中,使用“Ctrl+F”驗(yàn)證選擇器是否能匹配元素。
  • 針對(duì)動(dòng)態(tài)元素:使用更穩(wěn)定的定位方式(如文本定位):
    // 按文本定位(部分匹配)
    page.locator("text=百度一下").click();
    
  • 處理 iframe:先獲取 iframe 再操作內(nèi)部元素:
    Frame frame = page.frameLocator("iframe[name='iframeName']").frame();
    frame.locator("#username").fill("test");  // 操作 iframe 內(nèi)的元素
    

4. 操作超時(shí)(TimeoutException

現(xiàn)象:執(zhí)行操作時(shí)提示“Timeout 30000ms exceeded”。
原因:元素長(zhǎng)時(shí)間未就緒(如頁(yè)面卡頓、網(wǎng)絡(luò)緩慢)。
解決

  • 延長(zhǎng)超時(shí)時(shí)間(全局或針對(duì)單個(gè)操作):
    // 全局設(shè)置超時(shí)(1分鐘)
    page.setDefaultTimeout(60000);
    // 單個(gè)操作設(shè)置超時(shí)
    page.locator("#submit").click(new Locator.ClickOptions().setTimeout(60000));
  • 等待前置條件(如等待元素可見):
    page.locator("#submit").waitFor(new Locator.WaitForOptions().setState(State.VISIBLE));
    page.locator("#submit").click();
    

5. 無(wú)頭模式下截圖空白

現(xiàn)象headless=true 時(shí)截圖為空白,headless=false 時(shí)正常。
原因:無(wú)頭模式默認(rèn)視口較?。?00x600),或頁(yè)面未完全加載。
解決

  • 顯式設(shè)置視口大?。?div id="wppm3vysvbp" class="jb51code">
    Page page = browser.newPage(new Browser.NewPageOptions()
        .setViewportSize(1920, 1080)  // 適配頁(yè)面尺寸
    );
  • 確保截圖前頁(yè)面已加載:
    page.waitForLoadState(LoadState.LOAD);  // 等待頁(yè)面完全加載
    page.screenshot(...);
    
  • 六、進(jìn)階學(xué)習(xí)方向

    1. 元素定位高級(jí)技巧:使用 XPath 軸(如 //div[contains(text(), '關(guān)鍵詞')])、文本匹配(text=精確文本、text=/正則/)、屬性篩選([data-id="123"])。
    2. 網(wǎng)絡(luò)攔截:監(jiān)聽/修改請(qǐng)求(如替換接口返回?cái)?shù)據(jù)):
      page.route("**/api/data", route -> {
          route.fulfill(new Route.FulfillOptions()
              .setStatus(200)
              .setBody("{\"result\": \"mock data\"}")
          );
      });
    3. 多頁(yè)面/上下文管理:通過(guò) BrowserContext 模擬多用戶同時(shí)操作。
    4. 測(cè)試框架集成:與 JUnit、TestNG 結(jié)合,實(shí)現(xiàn)自動(dòng)化測(cè)試報(bào)告生成。

    總結(jié)

    Playwright 入門的核心是掌握“實(shí)例創(chuàng)建 → 瀏覽器啟動(dòng) → 頁(yè)面交互 → 資源釋放”的基本流程,理解其自動(dòng)等待機(jī)制可大幅減少調(diào)試成本。遇到問(wèn)題時(shí),優(yōu)先檢查選擇器正確性、資源釋放和網(wǎng)絡(luò)環(huán)境,再逐步深入高級(jí)特性。

    官方文檔是最佳學(xué)習(xí)資源:Playwright Java 文檔

    到此這篇關(guān)于Java中Playwright 應(yīng)用入門:0-1從基礎(chǔ)到實(shí)踐的文章就介紹到這了,更多相關(guān)Java Playwright 入門內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

    相關(guān)文章

    • Java數(shù)據(jù)結(jié)構(gòu)中的HashMap和HashSet詳解

      Java數(shù)據(jù)結(jié)構(gòu)中的HashMap和HashSet詳解

      HashMap和HashSet都是存儲(chǔ)在哈希桶之中,通過(guò)本文我們可以先了解一些哈希桶是什么,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
      2023-10-10
    • Springboot四種事件監(jiān)聽的實(shí)現(xiàn)方式詳解

      Springboot四種事件監(jiān)聽的實(shí)現(xiàn)方式詳解

      這篇文章主要介紹了Springboot四種事件監(jiān)聽的實(shí)現(xiàn)方式,事件監(jiān)聽是一種機(jī)制,可以定義和觸發(fā)自定義的事件,以及在應(yīng)用程序中注冊(cè)監(jiān)聽器來(lái)響應(yīng)這些事件,需要的朋友可以參考下
      2022-06-06
    • 使用java對(duì)一副撲克牌建模

      使用java對(duì)一副撲克牌建模

      這篇文章主要為大家詳細(xì)介紹了如何使用java對(duì)一副撲克牌建模,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
      2020-04-04
    • Java事務(wù)管理學(xué)習(xí)之Spring和Hibernate詳解

      Java事務(wù)管理學(xué)習(xí)之Spring和Hibernate詳解

      這篇文章主要給大家介紹了Java事務(wù)管理學(xué)習(xí)之Spring和Hibernate的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
      2017-03-03
    • Java中EnumSet代替位域代碼詳解

      Java中EnumSet代替位域代碼詳解

      這篇文章主要介紹了Java中EnumSet代替位域代碼詳解,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
      2018-02-02
    • 解決poi導(dǎo)出excel無(wú)法打開文件的問(wèn)題

      解決poi導(dǎo)出excel無(wú)法打開文件的問(wèn)題

      這篇文章主要介紹了解決poi導(dǎo)出excel無(wú)法打開文件的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
      2023-12-12
    • Java?Record的實(shí)現(xiàn)示例

      Java?Record的實(shí)現(xiàn)示例

      本文主要介紹了Java?Record的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
      2025-04-04
    • springboot整合spring-data-redis遇到的坑

      springboot整合spring-data-redis遇到的坑

      使用springboot整合redis,使用默認(rèn)的序列化配置,然后使用redis-client去查詢時(shí)查詢不到相應(yīng)的key.問(wèn)題出在哪,怎么解決呢?下面小編給大家?guī)?lái)了springboot整合spring-data-redis遇到的坑,需要的的朋友參考下吧
      2017-04-04
    • 解決spring boot 1.5.4 配置多數(shù)據(jù)源的問(wèn)題

      解決spring boot 1.5.4 配置多數(shù)據(jù)源的問(wèn)題

      下面小編就為大家?guī)?lái)一篇解決spring boot 1.5.4 配置多數(shù)據(jù)源的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
      2017-06-06
    • Nacos配合SpringBoot實(shí)現(xiàn)動(dòng)態(tài)線程池的基本步驟

      Nacos配合SpringBoot實(shí)現(xiàn)動(dòng)態(tài)線程池的基本步驟

      使用Nacos配合Spring Boot實(shí)現(xiàn)動(dòng)態(tài)線程池,可以讓你的應(yīng)用動(dòng)態(tài)地調(diào)整線程池參數(shù)而無(wú)需重啟,這對(duì)于需要高度可配置且需要適應(yīng)不同負(fù)載情況的應(yīng)用來(lái)說(shuō)非常有用,本文給大家介紹實(shí)現(xiàn)動(dòng)態(tài)線程池的基本步驟,需要的朋友可以參考下
      2024-02-02

    最新評(píng)論

    凤庆县| 龙岩市| 临夏县| 顺昌县| 兴海县| 怀柔区| 翼城县| 蒙自县| 巩留县| 青阳县| 淮滨县| 新化县| 重庆市| 平利县| 镇雄县| 铜梁县| 汤阴县| 雷州市| 绍兴县| 厦门市| 南和县| 丹凤县| 修武县| 普兰店市| 盖州市| 白水县| 广汉市| 资兴市| 肇州县| 宜良县| 沂南县| 固安县| 永福县| 红桥区| 马山县| 连江县| 娱乐| 潮州市| 涿鹿县| 嘉禾县| 且末县|