如何给selenium.chrome写扩展拦截或转发请求

Selenium WebDriver 是一组开源 API,用于自动测试 Web 应用程序,利用它可以通过代码来控制chrome浏览器!

代码已开源: 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扩展的

chrome.webRequest.onBeforeRequest.addListener( function(details) { //逻辑处理 }, { urls: [‘<all_urls>’]}, [‘blocking’, ‘extraHeaders’, ‘requestBody’] ); 这个api的函数 接收的details参数

details.url 是api的接口 函数的返回

Selenium.WebDriver 复制以下代码

/// /// Add Fiddler extention /// /// Chrome options /// Proxy host 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:softchromechrome2Chrome-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 ls = new List { “enable-automation” }; options.AddExcludedArguments(ls);

#region Fillder

#endregion

var chrome = new ChromeDriver(driverBinary, options);

https://dimg04.c-ctrip.com/images/0v52p120009obg6zn40D0.gif
经验分享 程序员 微信小程序 职场和发展