现在市面网站做推广好,谷歌网站为什么打不开,用php做网站出现的问题,免费精准客户采集软件Selenium WebDriver 是一组开源 API#xff0c;用于自动测试 Web 应用程序#xff0c;利用它可以通过代码来控制chrome edge等浏览器#xff01;有时候我们需要mock接口的返回#xff0c;或者拦截和转发请求#xff0c;今天就来实现这个功能本插件代码已开源#xff1a;h… Selenium WebDriver 是一组开源 API用于自动测试 Web 应用程序利用它可以通过代码来控制chrome edge等浏览器有时候我们需要mock接口的返回或者拦截和转发请求今天就来实现这个功能本插件代码已开源https://github.com/yuzd/OpenQA.Selenium.Chrome.FiddlernugetOpenQA.Selenium.Chrome.Fiddler开始coding我们新创建一个功能OpenQA.Selenium.Chrome.Fiddler一个chrome扩展 最起码有2个文件manifest.jsonbackground.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的apichrome.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 nameoptionsChrome options/param
/// param namefiddlerOptionProxy 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-featuresAutomationControlled);
options.AddArguments(--disable-infobars);
Liststring ls new Liststring { enable-automation };
options.AddExcludedArguments(ls);#region Fillderoptions.AddFiddler(new FiddlerOption
{OnBeforeRequestOptions new ListFiddlerOnBeforeRequestOptions{// 配置转发new FiddlerOnBeforeRequestOptions{Match https://www.cnblogs.com/yudongdong/ajax/GetPostStat,//正则RedirectUrl http://localhost:5000/GetPostStat,//如果匹配成功则将requestBody转发到这个url中去Cancel false//如果配置了canceltrue那么转发将无效true的意思是直接拦截这次的请求,不去发送了},// 配置拦截new FiddlerOnBeforeRequestOptions{Match https://www.cnblogs.com/yudongdong/ajax/blogStats,Cancel true//true的意思是直接拦截这次的请求,不去发送了},}
});#endregionvar chrome new ChromeDriver(driverBinary, options);实现效果可能有人问selenium webdriver 有太多的特征了如何绕过风控呢我的解决办法是修改chromium的源码来改变感兴趣的可以加我一起探讨!我是正东,学的越多不知道也越多,关注高效率写代码