由于 SSL 证书使用 Selenium Webdriver 和 BrowserMob 代理来捕获 har 文件,因此无法加载资源
Posted
技术标签:
【中文标题】由于 SSL 证书使用 Selenium Webdriver 和 BrowserMob 代理来捕获 har 文件,因此无法加载资源【英文标题】:Unable to load resource due to SSL certificates using Selenium Webdriver with BrowserMob proxy to capture har file 【发布时间】:2013-06-07 09:52:12 【问题描述】:我在 Java 中使用 Selenium Webdriver (Chromedriver) 以及 BrowserMob 代理服务器来捕获 har 文件中的 HTTP 流量。我最近遇到了网站部分无法加载的问题,我已将其缩小为以下错误: "未能加载资源https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"。
似乎在使用代理服务器时,Selenium 驱动程序无法访问 https 链接的 SSL 证书。这是我正在使用的代码的 sn-p:
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);"
,然后我不再能够捕获har文件。
我尝试切换到 firefox 驱动程序并设置 firefox 配置文件,但要么我做得不正确,要么它也不适合我的目的。
我也尝试在 Trusted Root Certifaction Authorities 中设置 BrowserMob 代理附带的 cybervillainsCA 证书,但这也没有解决问题。
有谁知道如何以收集 HTTP 流量并成功加载上述资源的方式解决此问题?
【问题讨论】:
我可以向this one提出重复的问题 【参考方案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/");
我在每页之后收集的har文件如下:
HarFileReader r = new HarFileReader();
HarFileWriter w = new HarFileWriter();
int count = 1;
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);
【讨论】:
以上是关于由于 SSL 证书使用 Selenium Webdriver 和 BrowserMob 代理来捕获 har 文件,因此无法加载资源的主要内容,如果未能解决你的问题,请参考以下文章
通过 SSL 进行 WCF 通信:由于第三方受信任的根证书颁发机构导致的 WCF 访问问题
零基础Selenium:Webdriver图文入门教程java篇(附相关包下载)