我正在使用Fiddler来监控来自我的selenium实例的流量。
我使用以下代码使用Fiddler.Core启动Fiddler
static void StartProxy()
{
FiddlerApplication.Shutdown();
FiddlerApplication.AfterSessionComplete += FiddlerApplication_AfterSessionComplete;
FiddlerApplication.Startup(8888, FiddlerCoreStartupFlags.DecryptSSL);
}
我正在启动Selenium以通过以下方式使用代理:
StartProxy();
var seleniumProxy = new Proxy { HttpProxy = "localhost:8888", SslProxy = "localhost:8888" };
var chromeOptions = new ChromeOptions { Proxy = seleniumProxy };
var path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) + "\\ChromeDriver\\";
var chromeService = ChromeDriverService.CreateDefaultService(path);
var driver = new ChromeDriver(chromeService, chromeOptions);
Selenium将导航到我的网页,Fiddler将收集HTTP请求。大多数数据总是会通过(例如HTML的GET),但是我想用Fiddler收集的数据(页面更新)只是在某些时候收集的(它曾经非常一致但现在很少有效) )。
我读过here和here,如果浏览器设置在localhost上,浏览器可以忽略代理。
我尝试将此行更改为计算机名称和IP地址,但没有运气,Chrome会启动并为每个人说“无法连接到代理服务器”。我也尝试了前面的“http://”。
// Original
var seleniumProxy = new Proxy { HttpProxy = "localhost:8888", SslProxy = "localhost:8888" };
// "Dot Trick"
var seleniumProxy = new Proxy { HttpProxy = "localhost.:8888", SslProxy = "localhost.:8888" };
// With this line, chrome will start and connect to proxy server but it will still not get the traffic I want consistently.
// IP Address
var seleniumProxy = new Proxy { HttpProxy = "192.168.1.5:8888", SslProxy = "192.168.1.5:8888" };
// Machine Name
var seleniumProxy = new Proxy { HttpProxy = "machine_name:8888", SslProxy = "machine_name:8888" };
我确定这是推出Fiddler,因为如果我尝试运行Fiddler桌面应用程序,我会得到“Port 8888已经在使用......”。
是否有一些启动代理的设置(我的StartProxy()),如果它不是默认的“localhost”,你必须指定终点?
感谢您的帮助。
答案 0 :(得分:1)
你所要求的并不完全清楚。
Chrome向FiddlerCore发送请求没有问题;你不需要任何特殊的步骤。
您的StartProxy
方法根本不应该调用Shutdown。
您正在使用AfterSessionComplete
,这意味着您只有在流量完成后才会被调用;如果有延迟可能会阻止您在很晚之前看到流量。
您的代码中的哪个位置清除浏览器的缓存,以确保它始终从网络(以及FiddlerCore)拉出而不是从Web浏览器的缓存中拉出来?