Hello Playwright:(8)等待頁面加載

在我們前面的文章中,我們始終使用await page.GotoAsync(url);加載頁面,我們的目的是等待足夠長的時間讓頁面上的元素出現。但是,我們更希望永遠不要因為等待浪費任何時間。

WaitUntil

GotoAsync方法的定義如下:

Task<IResponse?>?GotoAsync(string?url,?PageGotoOptions??options?=?null);

而在PageGotoOptions參數中,有一個WaitUntil,它的作用是判斷當前操作是否成功。可選值包括:

  • DOMContentLoaded 認為在 DOMContentLoaded 事件完成時操作完成

  • Load 認為在 load 事件完成時操作完成

  • NetworkIdle 認為在至少 500 毫秒內沒有網絡連接時操作完成

  • Commit 認為接收到網絡響應并且文檔開始加載時操作完成

上述概念從字面上不好理解,下面讓我們用一個 Demo 來演示一下:

var?url?=?"https://stackoverflow.com/";var?page1?=?await?browser.NewPageAsync();
await?page1.GotoAsync(url,?new?PageGotoOptions?{?WaitUntil?=?WaitUntilState.Commit?});
await?page1.ScreenshotAsync(new?PageScreenshotOptions?{?Path?=?"Commit.png",?FullPage?=?true?});var?page2?=?await?browser.NewPageAsync();
await?page2.GotoAsync(url,?new?PageGotoOptions?{?WaitUntil?=?WaitUntilState.DOMContentLoaded?});
await?page2.ScreenshotAsync(new?PageScreenshotOptions?{?Path?=?"DOMContentLoaded.png",?FullPage?=?true?});var?page3?=?await?browser.NewPageAsync();
await?page3.GotoAsync(url,?new?PageGotoOptions?{?WaitUntil?=?WaitUntilState.Load?});
await?page3.ScreenshotAsync(new?PageScreenshotOptions?{?Path?=?"Load.png",?FullPage?=?true?});var?page4?=?await?browser.NewPageAsync();
await?page4.GotoAsync(url,?new?PageGotoOptions?{?WaitUntil?=?WaitUntilState.NetworkIdle?});
await?page4.ScreenshotAsync(new?PageScreenshotOptions?{?Path?=?"NetworkIdle.png",?FullPage?=?true?});

我們用 4 種不同的WaitUntil值等待 https://stackoverflow.com/ 加載完成并截圖。下面是對應的效果

Commit

僅顯示了頁面默認窗口視圖下的元素。

9204cc4d6e42673b8a79e8372d646d7b.png

DOMContentLoaded

顯示了完整頁面(圖片太長,僅截取了部分)。

79c1d68fc44a05f6aa9f83cb89605e7e.jpeg

Load

和 DOMContentLoaded 的效果基本一樣,但是包含了所有圖片資源。

927019bd211db43ed5a27651a5d90d9b.jpeg

NetworkIdle

和 Load 的效果基本一樣,但是頁面頂部出現了警告。

5e0b3937d9948ca9defc41455be168ca.jpeg

這是因為,有個 js 文件無法下載,需要等待網絡連接超時關閉:

93d1a16dc32f31c1c147eb29ed634232.jpeg

結論

通過上面的 Demo,我們已經可以判斷出頁面加載的整個狀態變化如下:

Commit -> DOMContentLoaded -> Load -> NetworkIdle

你可以根據實際情況,選擇最適合的WaitUntil,避免無效的等待。

添加微信號【MyIO666】,邀你加入技術交流群

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285066.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285066.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285066.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【ArcGIS微課1000例】0012:ArcGIS創建及連接ArcSDE企業級地理數據庫實例

文章目錄 實驗材料實驗過程創建企業級數據庫連接企業級數據庫創建要素類要素入庫實驗材料 ArcGIS:版本為10.2Server.ecp:版本為10.2SQL Server:版本為2008實驗過程 創建企業級數據庫 企業級地理數據庫的創建需要通過工具箱來實現。 數據庫平臺:SQL Server 實例:localhos…

C語言試題172之實現冒泡排序算法

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:實現冒泡…

Qt移動應用開發(八):實現跨平臺的QML和OpenGL混合渲染

Qt移動應用開發&#xff08;八&#xff09;&#xff1a;實現跨平臺的QML和OpenGL混合渲染 上一篇文章講到了利用C這個橋梁&#xff0c;我們實現了QML和Java的交互。Qt 5大力推崇的QML/JS開發&#xff0c;讓輕量、高速開發的QML/JS打頭陣&#xff0c;讓重量的C撐腰&#xff0c;差…

【HTML5初探之form標簽】解放表單驗證、增加文件上傳、集成拖放

導航【初探HTML5之使用新標簽布局】用html5布局我的博客頁&#xff01;【HTML5初探之form標簽】解放表單驗證、增加文件上傳、集成拖放【HTML5初探之繪制圖像&#xff08;上&#xff09;】看我canvas元素引領下一代web頁面【HTML5初探之繪制圖像&#xff08;下&#xff09;】看…

兩時間差

/** * Comments:返回時間差 * param 兩個字符串類型的時間差(time1-time2),type(D天,H時,M分,S秒,Z-S天時分秒) * return */ public final static SimpleDateFormat SF_SIZE19 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//初始化時間格式 public static String …

【ArcGIS微課1000例】0013:ArcGIS創建色帶圖例(以GlobeLand30土地覆蓋數據為例)

本文以GlobeLand30土地覆蓋數據(2010年)為例,講解在ArcGIS中創建色帶圖例的方法。 案例數據: 色帶圖例: 創建過程: 選擇2010年數據,點擊添加到右側的圖例項。 在圖例向導里面,刪除圖例標題,點擊下一步。

使用.NET IoT驅動超聲波測距傳感器

背景最近買的一堆傳感器到貨了&#xff0c;先來把玩一下超聲波測距傳感器。超聲波傳感器一般用于機器人&#xff0c;小車的避障&#xff0c;物體的測距&#xff0c;液位檢測&#xff0c;停車檢測等領域。HC-SR04知識回顧開始之前我們先復習一下高中的物理知識。原理通過上圖的原…

2019-nCoV 全國新型肺炎疫情每日動態趨勢可視圖

傳染源: 野生動物&#xff0c;可能為中華菊頭蝠 病毒: 新型冠狀病毒 2019-nCoV 傳播途徑: 經呼吸道飛沫傳播&#xff0c;亦可通過接觸傳播 易感人群: 人群普遍易感。老年人及有基礎疾病者感染后病情較重&#xff0c;兒童及嬰幼兒也有發病 潛伏期: 一般為 3~7 天&#xff0c;最長…

C語言試題173之實現插入排序算法

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:實現排序…

【ArcGIS遇上Python】ArcGIS Python將多個文件夾內的分幅數據整合到同一個文件夾內——以Globeland30數據為例

文章目錄 WinRAR解壓縮ArcGIS Python批處理從Glabeland30官網下載的全球地覆蓋數據包括3年(2000、2010、2020),每一年都是按圖幅存儲的tif格式柵格數據。以2000的數據為例,全球共812個圖幅,每一個圖幅對應一個壓縮包,如下圖所示。 WinRAR解壓縮 在進行數據預處理時,必須…

Delphi中字符串比較大小 VS Oracle-SQL中字符串比較大小

重點注意Delphi和Oracle-SQL中比較字符串時空字符串的根本性的不同Delphi中的字符串比較 Delphi中字符串比較大小的規則&#xff1a;對應位置的字符按照字符編碼值逐個對比&#xff0c;直到遇到可以確定大小關系的就結束比較參考《Delphi的Ord函數和ASCII碼對照表》 常見的一些…

STM8S和STM8L調試串口中斷的注意點

源&#xff1a;STM8S和STM8L調試串口中斷的注意點

C語言試題174之實現快速排序算法

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:實現快速…

解決slideDown()、slideUp()執行結束后才執行下一次,導致鼠標離開后很久動畫依然在執行的問題...

問題描述&#xff1a; 給一個容器設置了mouseenter時&#xff0c;一個隱藏的box通過slideDown()顯示出來&#xff1b;mouseleave時&#xff0c;通過slideUp()隱藏。 當鼠標不斷在容器上滑過時&#xff0c;會導致鼠標離開很久后&#xff0c;動畫也在不斷執行 解決方法&#xff…

Docker Compose 安裝 Superset

前言動手學 dockerSuperset 是一個強大的在線 SQL 查詢編輯工具&#xff0c;同時也是一個輕量級的 BI 工具&#xff0c;今天我們就來動手學一下用 docker compose 安裝 Superset。安裝動手學 docker安裝 git 并克隆項目&#xff1a;yum install git -ygit clone https://github…

[轉]再見 NoSQL!

為解決大規模數據集合多重數據種類帶來的挑戰&#xff0c;NoSQL 應運而生&#xff0c;但現在卻也遇到了諸多問題&#xff0c;本文作者 Rick Negrin&#xff0c;曾在微軟工作 12 年&#xff0c;并在 SQL Server 團隊度過大部分光陰&#xff0c;他提出&#xff0c;是時候「和 NoS…

【ArcGIS Pro微課1000例】0008:ArcGIS Pro加載不同來源的在線底圖數據

ArcGIS Pro可以很方便的選擇不同來源的在線底圖數據,如中國地圖彩色版、各種形式的天地圖等。 打開ArcGIS Pro,點擊左下角的【設置】。 點擊【選項】。 ArcGIS Pro提供了三種形式的底圖:組織的默認底圖、自定義底圖<

ORA-16198: LGWR received timedout error from KSR

ORA-16198: LGWR received timedout error from KSRORA-16198 意味著主庫上的LOG_ARCHIVE_DEST_2的NET_TIMEOUT設置的太小&#xff0c;導致LNS不能在設置的時間內將日志傳輸到備庫。解決方法是提高NET_TIMEOUT的值到15-20 秒&#xff0c;SQL>ALTER SYSTEM SET LOG_ARCHIVE_D…

php+mysql實現數據分批插入

上周需要將云端的數據有條件的錄入到mysql中&#xff0c;最開始是使用遍歷數據然后一條條的插入的笨方法&#xff0c;結果速度慢的要死&#xff0c;所以又隨便寫了個笨方法2.0&#xff0c;記錄一下自己菜鳥的成長歷程。同時這也是在博客園的第一篇文章&#xff0c;目的僅僅是單…

RIL接聽電話沒有聲音的問題 [ RIL_Answer | RIL_SetAudioDevices ]

沒有什么好說明的&#xff0c;直接上代碼&#xff1a; RIL_Answer(m_hRil); RILAUDIODEVICEINFO audioDeviceInfo; audioDeviceInfo.cbSize sizeof(audioDeviceInfo); audioDeviceInfo.dwParams RIL_PARAM_ADI_ALL; audioDeviceInfo.dwRxDevic…