Hello Playwright:(3)基本概念

下面介紹一下 Playwright 中的基本概念:

Headless 瀏覽器

Playwright 需要特定版本的瀏覽器二進制文件才能運行。這些瀏覽器都支持 2 種 運行模式:

  • Headless,無瀏覽器 UI,運行速度較快,常用于自動化運行

  • Headed,有瀏覽器 UI,常用于調試代碼

Playwright 默認使用的是 Headless 模式,設置BrowserTypeLaunchOptions可以關閉 Headless 模式:

var?browser?=?await?playwright.Chromium.LaunchAsync(new?BrowserTypeLaunchOptions?{?Headless?=?false?});

對象模型

Playwright 定義了如下這些對象模型:

c1bcd6bcdeffa33587b2bc3d36e0dff1.png

Browser 瀏覽器

Browser是 Playwright 通過BrowserType.LaunchAsync(options)方法創建的瀏覽器對象。

可選的 BrowserType 包括:

  • Chromium,Playwright 默認使用開源的 Chromium 瀏覽器。但是可以通過參數指定使用 Google Chrome 或者 Microsoft Edge 瀏覽器:

using?var?playwright?=?await?Playwright.CreateAsync();
var?chromium?=?playwright.Chromium;// channel 參數指定瀏覽器分發通道。值可以為“chrome”、“chrome-beta”、“chrome-dev”、“chrome-canary”、“msedge”、“msedge-beta”、“msedge-dev”、“msedge-canary”
var?browser?=?await?chromium.LaunchAsync(
new?BrowserTypeLaunchOptions?{?Channel?=?"chrome"?});
  • Firefox,與最近的 Firefox 穩定版相匹配。

  • WebKit,與最近的 WebKit trunk 版本相匹配,版本領先于 Apple Safari 和其他基于 WebKit 的瀏覽器。

BrowserContext 瀏覽器上下文

BrowserContext 提供了一種操作多個獨立瀏覽器會話的方法。每個Browser實例都包含一個默認的BrowserContext實例。

可以使用Browser.NewContextAsync方法創建“隱身”瀏覽器上下文。“隱身”瀏覽器上下文類似于 Google Chrome 的無痕式窗口,可以在瀏覽器會話之間隔離瀏覽器狀態:

var?browserContext1?=?await?browser.NewContextAsync();
Console.WriteLine($"browserContext1?Session?{await?GetSession(browserContext1)}");
Console.WriteLine($"browserContext1?Session?{await?GetSession(browserContext1)}");var?browserContext2?=?await?browser.NewContextAsync();
Console.WriteLine($"browserContext2?Session?{await?GetSession(browserContext2)}");private?static?async?Task<string>?GetSession(IBrowserContext?browserContext)
{var?page?=?await?browserContext.NewPageAsync();await?page.GotoAsync("https://account.cnblogs.com/signin");var?cookies?=?await?browserContext1.CookiesAsync();return?cookies.First(p?=>?p.Name?==?".Cnblogs.Account.Session").Value;
}//同一瀏覽器上下文獲得的會話ID相同
browserContext1?Session?CfDJ8AuMt%2F3FvyxIgNOR82PHE4no0sUf7I3NiZ5vRmbIv9lQrRo3aoAkQ7RAm4ddlBoLAk40iVfg10%2F%2FRvnRY5MCZ6zeVMunRoeM3mqKkyh0nWK5HWvj7RAq1krRzqA%2BQW%2BXCqpdf3kBJvmjC1uACr3h4kVeaY2nqTY%2FRJ3Tp55Fo3aS
browserContext1?Session?CfDJ8AuMt%2F3FvyxIgNOR82PHE4no0sUf7I3NiZ5vRmbIv9lQrRo3aoAkQ7RAm4ddlBoLAk40iVfg10%2F%2FRvnRY5MCZ6zeVMunRoeM3mqKkyh0nWK5HWvj7RAq1krRzqA%2BQW%2BXCqpdf3kBJvmjC1uACr3h4kVeaY2nqTY%2FRJ3Tp55Fo3aS//不同瀏覽器上下文獲得的會話ID不同
browserContext2?Session?CfDJ8AuMt%2F3FvyxIgNOR82PHE4k6gMjjX4oHDpKiyNDycdgnx5YlW%2Bd00yS1ztwodcO6QH%2B38HHwyzdNQ3ClVdlstFdcrJw0TDLqq6atFm%2F%2FH3TcLc18%2BQEN0MOQmRbFT39hq77AZ%2FF%2BlZ2bc9svnB%2FEpU%2FDmiP5eLWXK9V2Fn0jKIiM

Page 頁面

Page是指瀏覽器上下文中的單個選項卡或彈出窗口。每個BrowserContext可以有多個Page

var?page?=?await?browserContext.NewPageAsync();
await?page.GotoAsync("https://account.cnblogs.com/signin");

Frame 框架

一個Page可以包含一個或多個Frame對象。每個頁面都有一個MainFrame,并且假定頁面級交互(如點擊)在MainFrame中操作。可以通過訪問這些Frame以進行框架內的交互。

var?page?=?await?browser.NewPageAsync();
await?page.GotoAsync("https://www.w3school.com.cn/tiy/t.asp?f=eg_html_frame_mix");
DumpFrameTree(page.MainFrame,?string.Empty);//顯示?Frame?嵌套樹
private?static?void?DumpFrameTree(IFrame?frame,?string?indent)
{Console.WriteLine($"{indent}{frame.Url}");foreach?(var?child?in?frame.ChildFrames)DumpFrameTree(child,?indent?+?"?");
}

e42d15763bd5f7e965bfc56f5714c4f0.png

4d1835cd65bfe8243c18035ebe391716.png

Locator 定位器

Locator代表了一種隨時在頁面上查找元素的方法。可以使用Page.Locator(selector, options)方法創建定位器。

//查找?title?元素,例如"<title>百度一下,你就知道</title>"
var?locator?=?page.Locator("title");
Console.WriteLine(await?locator.InnerTextAsync());

結論

通過靈活應用上述對象模型以及對象模型提供的方法,我們可以實現編寫代碼來創建新的瀏覽器頁面,導航到 URL,然后與頁面上的元素進行交互。

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

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

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

相關文章

[python opencv 計算機視覺零基礎到實戰] 十二 直方圖

一、學習目標 了解matplotlib繪圖庫的使用了解如何通過折線圖或者直方圖對圖表進行繪制了解了通過圖標對圖片內容進行直觀判斷 如有錯誤歡迎指出~ 二、了解圖像直方圖及其應用 2.1 了解matplotlib庫 在了解圖像直方圖前我們需要了解一個matplotlib庫&#xff0c;matplotli…

建造者模式之項目運用

1 問題 建造者模式&#xff0c;我們也許不陌生&#xff0c;因為我們看到很多開源框架或者Android源碼里面用到&#xff0c;類似這樣的代碼結構 A a new A.builder().method1("111").method2("222").build(); 很明顯&#xff0c;一般這里的結構有builde…

專題三--1005

題目 A group of researchers are designing an experiment to test the IQ of a monkey. They will hang a banana at the roof of a building, and at the mean time, provide the monkey with some blocks. If the monkey is clever enough, it shall be able to reach the …

shell中的數字

shell中的數字 author :headsen chen date :2017-10-18 15:01:42 個人原創&#xff0c;轉載請注明作者&#xff0c;出處&#xff0c;否則依法追究法律責任 1,生成隨機數&#xff08;范圍&#xff1a;0-32767&#xff09;&#xff0c;用特殊變量&#xff1a;RANDOM 2&#xff…

serviceloader java_【java編程】ServiceLoader使用看這一篇就夠了

轉載:https://www.jianshu.com/p/7601ba434ff4想必大家多多少少聽過spi&#xff0c;具體的解釋我就不多說了。但是它具體是怎么實現的呢&#xff1f;它的原理是什么呢&#xff1f;下面我就圍繞這兩個問題來解釋&#xff1a;實現: 其實具體的實現類就是java.util.ServiceLoader…

.NET7 Preview4 之OpenAPI swagger改進

在MiniAPI系列中&#xff0c;《.NET6之MiniAPI(十八)&#xff1a;OpenAPI swagger》介紹了swagger在MiniAPI框架中的使用&#xff0c;當時留下很多不足&#xff0c;隨著.NET7 Preview4的推出&#xff0c;這方面得到了很大的改進&#xff0c;我還是使用“十八”這篇文章的案例。…

Swift - 自定義單元格實現微信聊天界面

1&#xff0c;下面是一個放微信聊天界面的消息展示列表&#xff0c;實現的功能有&#xff1a; &#xff08;1&#xff09;消息可以是文本消息也可以是圖片消息&#xff08;2&#xff09;消息背景為氣泡狀圖片&#xff0c;同時消息氣泡可根據內容自適應大小&#xff08;3&#x…

[python opencv 計算機視覺零基礎到實戰] 十三 直方圖顏色提鮮

一、學習目標 了解了均衡化的作用是什么了解灰度、YUV、彩色圖片均衡化的方法是使用什么方法了解了合并通道的方法是什么了解了分離通道的方法是什么 如有錯誤歡迎指出~ 二、了解圖像均衡化 2.1 了解直方圖均衡化 圖像直方圖均衡化主要是對圖像中的少數灰度進行壓縮&#…

java 中字符串比較方法_java中常用的字符串的比較方法(兩種)

比較字符串比較常用的兩個方法是運算符“”和String的equals方法。使用“”比較兩個字符串&#xff0c;是比較兩個對象的的“地址”是否一致&#xff0c;本質就是判斷兩個變量是否指向同一個對象&#xff0c;如果是則返回true&#xff0c;否則返回的是false。而String類的equal…

Android之稍微靠譜點的透明Activity(不獲取觸摸事件)

1 問題 實現透明的Activity(不獲取觸摸事件),就行什么也看不到,打開了透明activity,也不影響其他頁面的滑動和點擊,就行什么事情都沒發生一樣。 2 代碼實現 1)配置樣式 <style name="TestTheme" parent="Theme.AppCompat.Light"><item na…

分布式服務框架dubbo原理解析 轉

alibaba有好幾個分布式框架&#xff0c;主要有&#xff1a;進行遠程調用(類似于RMI的這種遠程調用)的(dubbo、hsf)&#xff0c;jms消息服務(napoli、notify)&#xff0c;KV數據庫(tair)等。這個框架/工具/產品在實現的時候&#xff0c;都考慮到了容災&#xff0c;擴展&#xff…

【傾情奉獻】遙感物候研究:30年長時間序列遙感數據集GIMMS 3g NDVI產品預處理完整步驟

本文為作者碩士學位論文遙感物候研究數據處理過程總結。GIMMS(Global Inventory Modelling and Mapping Studies) 3g NDVI來源于ECOCAST網站(http://ecocast.arc.nasa.gov),是由NOAA衛星搭載的AVHRR傳感器獲取的全球植被數據,空間分辨率為0.0833?,時間分辨率為15?d,一…

過早的給方法中 引用對象 設為 null 可被 GC提前回收嗎?

經常在代碼中看到有人將 null 賦值給引用類型&#xff0c;來達到讓 GC 提前回收的目的&#xff0c;這樣做真的有用嗎&#xff1f;今天我們就來研究一下。為了方便講解&#xff0c;來一段測試代碼&#xff0c;提前將 test1null &#xff0c;然后調用 GC.Collect() 看看是否能提前…

[python opencv 計算機視覺零基礎到實戰] 十五 直方圖反向投影

一、學習目標 了解了直方圖反向投影的一般流程了解2D直方圖的使用 如有錯誤歡迎指出~ 二、了解直方圖反向投影 2.1 了解2D直方圖 需要對直方圖進行反向投影&#xff0c;需要使用2D直方圖。2D直方圖需要使用calcHist方法。calcHist方法在前兩節中已經有了解&#xff0c;現在…

關聯規則java代碼_重量挖掘關聯規則挖掘方法,哪個大神可以將以下偽代碼轉換為Java代碼?...

重量挖掘關聯規則挖掘方法&#xff0c;哪個大神可以將以下偽代碼轉換為Java代碼&#xff1f; 10改進的加權關聯規則算法的基本步驟與Apriori算法相似: 首先找到加權支持度不小于用戶指定的最小加權支持度的所有頻繁項集加權關聯規則&#xff0c;然后使用頻繁項集生成所有滿足最…

Boostrap ZURB Foundation —— Web開發前端框架

webflow&#xff1a;Webflow 允許設計師通過自由的拖拉拽與 CSS 類互動&#xff0c;而定義它們的過程無需寫任何一行代碼。用戶在完成從設計到 CSS 構架之后&#xff0c;甚至可以在線直接將建好的網頁發布&#xff0c;而不需要導出代碼到其他發布工具上。類似的這些 B2D 市場&a…

Git之HEAD和origin

1 問題 我們經常看見git相關操作里面看到HEAD和origin這些專業名稱&#xff0c;它娘的到底什么意思。 2 解釋 1&#xff09;HEAD git 中的分支&#xff0c;本質上僅僅是個指向 commit 對象的可變指針&#xff0c; HEAD 是一個特別指針&#xff0c;它是一個指向你正在工作中的…

如何離線安裝chrome插件

如何離線安裝chrome插件 本文轉自Work Hard Work Smart博客園博客&#xff0c;原文鏈接&#xff1a;http://www.cnblogs.com/linlf03/p/6838852.html&#xff0c;如需轉載請自行聯系原作者

多種語言《九九乘法表》薈萃:C、C++、C#、JavaScript、SQL、VB、VBA、Python

九九乘法表對于我們學習循環結構,尤其是雙重循環特別有幫助,本文演示用C、C++、C#、HTML、SQL、VB、VBA、Python等多種語九九乘法表。 一、C語言 #include<stdio.h> main() {int i,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++){printf("%d*%d=%d\t",j,i,i*j…