SeleniumWebDriver擴展插件開發

a92e2794836892fdd5706af8eb89f9d4.jpeg

Selenium WebDriver 是一組開源 API,用于自動測試 Web 應用程序,利用它可以通過代碼來控制chrome edge等瀏覽器!

有時候我們需要mock接口的返回,或者攔截和轉發請求,今天就來實現這個功能

本插件代碼已開源:https://github.com/yuzd/OpenQA.Selenium.Chrome.Fiddler

nuget

OpenQA.Selenium.Chrome.Fiddler

開始coding

我們新創建一個功能:OpenQA.Selenium.Chrome.Fiddler

一個chrome擴展 最起碼有2個文件

  • manifest.json

  • background.js

稍微解釋一下:

manifest.json 是來描述chrome擴展的
{"version":?"1.0.0","manifest_version":?2,"name":?"Chrome?Fiddler","permissions":?["proxy","tabs","unlimitedStorage","storage","<all_urls>","webRequest","webRequestBlocking"],"background":?{"scripts":?["background.js"]},"minimum_chrome_version":"22.0.0"
}
background.js 是邏輯處理模塊

因為攔截api 或者 轉發 需要用的chrome的api

chrome.webRequest.onBeforeRequest.addListener(function(details)?{//邏輯處理},{?urls:?['<all_urls>']},['blocking',?'extraHeaders',?'requestBody']
);

這個api的函數 接收的details參數

  • details.url 是api的接口

函數的返回

  • {cancel:true} ?攔截請求

  • {redirectUrl:''} 轉發到指定url

寫selenium.chrome插件

新建一個netstand工程,然后引用

  • Selenium.WebDriver

復制以下代碼

///?<summary>
///?Add?Fiddler?extention
///?</summary>
///?<param?name="options">Chrome?options</param>
///?<param?name="fiddlerOption">Proxy?host</param>
public?static?void?AddFiddler(this?ChromeOptions?options,?FiddlerOption?fiddlerOption)
{var?backgroundProxyJs?=?ReplaceTemplates(background_js,?fiddlerOption);if?(!Directory.Exists("Plugins"))Directory.CreateDirectory("Plugins");var?guid?=?Guid.NewGuid().ToString();var?manifestPath?=?$"Plugins/manifest_{guid}.json";var?backgroundPath?=?$"Plugins/background_{guid}.js";var?archiveFilePath?=?$"Plugins/proxy_auth_plugin_{guid}.zip";File.WriteAllText(manifestPath,?manifest_json);File.WriteAllText(backgroundPath,?backgroundProxyJs);using?(var?zip?=?ZipFile.Open(archiveFilePath,?ZipArchiveMode.Create)){zip.CreateEntryFromFile(manifestPath,?"manifest.json");zip.CreateEntryFromFile(backgroundPath,?"background.js");}File.Delete(manifestPath);File.Delete(backgroundPath);options.AddExtension(archiveFilePath);
}private?static?string?ReplaceTemplates(string?str,?FiddlerOption?fiddlerOption)
{if?(fiddlerOption.OnBeforeRequestOptions?!=?null){var?beforeConfigs?=?Newtonsoft.Json.JsonConvert.SerializeObject(fiddlerOption.OnBeforeRequestOptions);str?=?str.Replace("{before_configs}",?beforeConfigs);}return?str;
}

上面的代碼主要是創建一個chrome擴展zip包

然后再selenium.chrome啟動的時候傳進去這個zip包的地址

使用方法

var?driverBinary?=?@"D:\soft\chrome\chrome2\Chrome-bin\";ChromeOptions?options?=?new?ChromeOptions
{BinaryLocation?=?Path.Combine(driverBinary,?"chrome.exe")
};Environment.SetEnvironmentVariable("webdriver.chrome.driver",?driverBinary);
options.AddArgument("--disable-blink-features=AutomationControlled");
options.AddArguments("--disable-infobars");
List<string>?ls?=?new?List<string>?{?"enable-automation"?};
options.AddExcludedArguments(ls);#region?Fillderoptions.AddFiddler(new?FiddlerOption
{OnBeforeRequestOptions?=?new?List<FiddlerOnBeforeRequestOptions>{//?配置轉發new?FiddlerOnBeforeRequestOptions{Match?=?"https://www.cnblogs.com/yudongdong/ajax/GetPostStat",//正則RedirectUrl?=?"http://localhost:5000/GetPostStat",//如果匹配成功則將requestBody轉發到這個url中去Cancel?=?false//如果配置了cancel=true那么轉發將無效,true的意思是直接攔截這次的請求,不去發送了},//?配置攔截new?FiddlerOnBeforeRequestOptions{Match?=?"https://www.cnblogs.com/yudongdong/ajax/blogStats",Cancel?=?true//true的意思是直接攔截這次的請求,不去發送了},}
});#endregionvar?chrome?=?new?ChromeDriver(driverBinary,?options);

實現效果


272d0eee2a5bb48ae31a9cde1d429755.gif



可能有人問,selenium, webdriver 有太多的特征了,如何繞過風控呢

我的解決辦法是修改chromium的源碼來改變,感興趣的可以加我一起探討!


我是正東,學的越多不知道也越多,關注高效率寫代碼!

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

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

相關文章

ZooKeeper的工作原理

ZooKeeper是一個分布式的應用程序協調服務。 2 ZooKeeper的工作原理 Zookeeper 的核心是原子廣播&#xff0c;這個機制保證了各個Server之間的同步。實現這個機制的協議叫做Zab(Zookeeper Atomic Broadcast)協議。Zab協議有兩種模式&#xff0c;它們分別是恢復模式&#xff08;…

memcache的學習路線圖

memcache學習材料//memcache自帶的github 上的 wiki//席劍飛 Memcache&#xff08;MC&#xff09;系列 1~8系列評注&#xff1a; memcache系統寫的最深的一博客&#xff0c;建議一讀。http://blog.csdn.net/xifeijian/article/details/21994941//mysql與memcache的使用https://…

[轉]錢嶺:別擔心“35歲危機”,要成為“老專家”

從清華大學到貝爾實驗室&#xff0c;再到中國移動&#xff0c;作為“IT老人”&#xff0c;錢嶺的技術人生幾乎覆蓋了20世紀90年代至今的信息產業革命。2007年開始&#xff0c;錢嶺在中國移動經歷了基礎科研到產品落地&#xff0c;再到團隊孵化&#xff1b;也經歷了云計算從無到…

【GIS前沿】周成虎院士:GIS的大數據時代展望(PPT分享)

本文源自微信公眾號&#xff1a;宋關福GIS筆記。版權歸原作者及刊載媒體所有&#xff0c;如有侵權請立即與我們聯系,我們將及時處理。更多GIS前言技術&#xff0c;請關注《GIS前言》專欄。 GIS的大數據時代展望

DataV:可視化大屏展示神器實戰分享

由于公司年即將發布新的產品&#xff0c;傳統意義上的PPT顯得不太生動化&#xff0c;所以想采用具體化&#xff0c;可視化的數據大屏進行業務數據的事實展示&#xff0c;第一時間想到了來自于阿里云旗下的DataV&#xff0c;廢話不多說&#xff0c;老司機開始發牌照&#xff01;…

數據庫性能系列之索引(中)

GOOD NIGHT前言上一篇中&#xff0c;我們已經了解到了索引的基本概念和一些用法。那索引為什么會提升查詢的速度&#xff0c;以及索引究竟是怎么工作的呢&#xff1f;也許大家心里還是有一些迷茫&#xff0c;這一切&#xff0c;還要從索引背后的算法說起。GOOD NIGHT概述大家知…

微服務架構的設計原則和核心話題

目錄 一、前言 二、微服務架構的設計原則 1.拆分足夠微 2.輕量級通信 3.單一職責原則 4.領域驅動原則 三、微服務架構的核心話題 1.服務拆分 2.服務注冊與發現 3.負載均衡 4.API網關 5.服務部署與發布 四、總結 一、前言 毫無疑問&#xff0c;微服務架構的設計原…

4.3.2 基于集合的操作

在SQL Server處理select命令時&#xff0c;會在內存中建立一個結構&#xff0c;以返回結果集。這個結構實質上是一個有行和列的二維數組&#xff0c;稱為“游標&#xff08;cursor&#xff09;”。“游標”這個詞是“CURrent set of Records(當前記錄集)”的縮寫。它表示從表或…

Golang GOPATH 包

2019獨角獸企業重金招聘Python工程師標準>>> Golang GOPATH & 包的定義 & 包的導入 GOPATH 設置 go 命令依賴一個重要的環境變量&#xff1a;$GOPATH 可以在 .zshrc 配置文件中加上一行這樣的配置&#xff0c; export GOPATH/Users/flyme/mygo Go從1.1版本到…

PPK大疆無人機應用教程

文章目錄 一、新建項目二、導入數據三、解算過程四、結果導出一、新建項目 新建工程,設置項目名稱,保存位置,控制等級,坐標系統(坐標系統選擇高斯克呂格,中央子午線根據實際數據所在位置進行選擇) 二、導入數據 選擇大疆數據,找到對應的文件夾 數據有:圖片,EVENT.b…

Eclipse Add generated serial version ID報錯解決方案

為什么80%的碼農都做不了架構師&#xff1f;>>> 問題&#xff1a; The following problem occurred:Could not find class file.Make sure the file is compilable 解決方案&#xff1a; 1、右鍵項目 -> Java Build Path -> Source 在Sourcd folders on bui…

開啟線程的方式

1、實現Runnable接口 1 package test;2 3 4 5 public class ThreadTest implements Runnable{6 public void tt(){7 Thread t new Thread(this);8 t.start();9 } 10 11 Override 12 public void run() { 13 while(true){ 14 …

C# WPF設備監控軟件(經典)-上篇

01—前言應老東家也是老同學的需求&#xff0c;開發了此設備監控軟件。主要是為了應對測試設備長時間不上傳測試數據未能及時發現的問題&#xff0c;測試數據一般在每臺設備都有個固定的臨時存放目錄&#xff0c;測試數據不更新時&#xff0c;此文件夾便不再更新。需求相對比較…

[轉]微服務的4個設計原則和19個解決方案

目錄 一、微服務架構演進過程 二、微服務架構的好處 三、微服務應用4個設計原則 1.AKF拆分原則 2.前后端分離 3.無狀態服務 4.Restful通信風格 四、微服務架構帶來的問題 五、微服務平臺的19個落地實踐 1.企業IT建設的三大基礎環境 2.微服務應用平臺總體架構 3.微服…

時間處理總結(二)oracle

不斷總結中................. 1.等于land.djsjto_date(2016/7/26,yyyy-MM-dd)2.大于等于land.djsj>to_date(2016/7/26,yyyy-MM-dd)3.小于等于land.djsj<to_date(2016/7/26,yyyy-MM-dd)4.區間land.djsj>to_date(2016/7/26,yyyy-MM-dd) and land.djsj<to_date(2016/7…

【GlobalMapper精品教程】033:影像地圖羽化方式詳解

在Globalmapper中,可以很方便的對影響進行多種羽化值設置。 文章目錄 1. 不要羽化此圖層2. 沿一個或多個邊緣羽化3. 羽化到有效數據的多邊形覆蓋4. 在當前選定的多邊形內羽化5. 裁剪到選定的邊界,而不是羽化6. 在多邊形外部羽化,而不是內部加載配套案例數據包中的data033.ra…

基于WPF重復造輪子,寫一款數據庫文檔管理工具(一)

項目背景公司業務歷史悠久且復雜&#xff0c;數據庫的表更是多而繁雜&#xff0c;每次基于老業務做功能開發都需要去翻以前的表和業務代碼。需要理解舊的表的用途以及包含的字段的含義&#xff0c;表少還好說&#xff0c;但是表一多這就很浪費時間&#xff0c;而且留下來的文檔…

[轉]GitBook使用教程收藏

GitBook使用教程 最簡單的方式就是使用GitBook編輯器&#xff0c;沒有什么難度&#xff0c;后面的教程主要針對命令行的方式 PS&#xff1a;GitBook的book頁面默認沒有download按鈕的 需要到設置中打開&#xff0c;打開后再次publish生效 同步GitHub 更新失敗&#xff0c;無法…

二 面向對象三大特性

一 繼承與派生 一、繼承定義 二、繼承與抽象的關系 三、繼承與重用性 四、派生 五、組合與重用性 六、接口與歸一化設計 七、抽象類 八、繼承實現的原理 九、子類中調用父類的方法 二 多態與多態性 一、多態 二、多態性 三 封裝 一、封裝定義 二、特性(property) 三、封裝與擴展…

CSS3新屬性

邊框&#xff1a; border-radius 用于創建圓角 div { border:2px solid; border-radius:25px; -moz-border-radius:25px; /* Old Firefox */ } box-shadow 用于向方框添加陰影 div { box-shadow: 10px 10px 5px #888888; } border-image 使用圖片來創建邊框 div { border-image…