如何给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

