2013-06-11 67 views
2

我使用Java中的Selenium Webdriver(Chromedriver)以及BrowserMob Proxy Server來捕獲har文件中的HTTP流量。我最近遇到了一個網站部分無法加載的問題,並且我將其縮小到這個錯誤: 「無法加載資源https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js」。由於使用Selenium Webdriver和BrowserMob代理來捕獲har文件,導致SSL證書無法加載資源

似乎在使用代理服務器時,Selenium驅動程序無法訪問https鏈接的SSL證書。下面是我使用的代碼片段:

ProxyServer server = new ProxyServer(4040); 
server.start(); 
Proxy proxy = server.seleniumProxy(); 
DesiredCapabilities capabilities = new DesiredCapabilities(); 
capabilities.setCapability(CapabilityType.PROXY, proxy); 
driver = new ChromeDriver(capabilities); 
server.newHar("myHar"); 
Har har = server.getHar(); 
server.stop(); 

我曾嘗試加入"capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);",這解決了上述問題,但只有當我刪除"capabilities.setCapability(CapabilityType.PROXY, proxy);",然後我不再能捕捉到哈日文件。

我試着切換到一個Firefox驅動程序,並設置了一個Firefox的配置文件,但要麼我沒有做到這一點,否則它也不適用於我的目的。

我也嘗試在受信任的根證書頒發機構中設置隨BrowserMob代理一起提供的cybervillainsCA證書,但那也沒有解決問題。

有誰知道如何解決這個問題,我可以收集HTTP流量以及成功加載上面提到的資源?

+0

它可能我一個重複的問題[這一個](http://stackoverflow.com/questions/19682868/how-can-i-intercept -ssl-請求與 - browsermob代理/ 19862030#19862030) –

回答

1

我最終做的是完全廢除代理,而是改用Firebug和NetExport擴展的Firefox配置文件來導出har文件。這最終會大大減緩測試,併爲每個訪問的頁面導出一個har,而不是整個會話。

代碼:
//Firefox profile FirefoxProfile ffProfile = new FirefoxProfile();
ffProfile.addExtension(new File("firebug-1.11.4-fx.xpi"));
ffProfile.addExtension(new File("netExport-0.9b3.xpi"));

//Set default Firefox preferences ffProfile.setPreference("app.update.enabled", false); String domain = "extensions.firebug.";

//Set default Firebug preferences ffProfile.setPreference(domain + "currentVersion", "1.11.4"); ffProfile.setPreference(domain + "allPagesActivation", "on");
ffProfile.setPreference(domain + "defaultPanelName", "net"); ffProfile.setPreference(domain + "net.enableSites", true);

//Set default NetExport preferences ffProfile.setPreference(domain + "netexport.alwaysEnableAutoExport", true);
ffProfile.setPreference(domain + "netexport.autoExportToFile", true);
ffProfile.setPreference(domain + "netexport.showPreview", false);
ffProfile.setPreference(domain + "netexport.defaultLogDir", "string file path");

//WebDriver, instantiated outside the method
driver = new FirefoxDriver(ffProfile);
s = new WebDriverBackedSelenium(driver, "http://www.google.ca/");

我收集的每個頁面後,哈日文件,如下所示:

HarFileReader r = new HarFileReader();
HarFileWriter w = new HarFileWriter();

String allHars = "";
String harFolderPath = "file path for har";
File dir = new File(harFolderPath);
for (File child : dir.listFiles()) {
HarLog log = r.readHarFile(child);
File f = new File(harFolderPath + "\\test"+count+".txt");
w.writeHarFile(log, f);
allHars = allHars + readFileAsString(f.getPath());
count++;
}
FileUtils.cleanDirectory(dir);

相關問題