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