ssl - 由于使用带有 BrowserMob 代理的 Selenium Webdriver 捕获 har 文件的 SSL 证书,无法加载资源

标签 ssl https selenium-webdriver proxy-server har

我在 Java 中使用 Selenium Webdriver (Chromedriver) 以及 BrowserMob 代理服务器来捕获 har 文件中的 HTTP 流量。我最近遇到了网站部分无法加载的问题,我已将其缩小为以下错误: “无法加载资源 https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js”。

似乎在使用代理服务器时,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);" 然后我就无法再捕获 har 文件了。

我尝试切换到 firefox 驱动程序并设置 firefox 配置文件,但要么我没有正确操作,要么它也不适合我的目的。

我也尝试在 Trusted Root Certifaction Authorities 中设置 BrowserMob 代理附带的 cybervillainsCA 证书,但这也没有解决问题。

有谁知道如何以我可以收集 HTTP 流量并成功加载上述资源的方式解决此问题?

最佳答案

我最终做的是完全废弃代理,转而使用带有 Firebug 和 NetExport 扩展的 Firefox 配置文件来导出 har 文件。这最终显着降低了测试速度,并为访问的每个页面而不是整个 session 导出 har。

代码:
//Firefox 配置文件 FirefoxProfile ffProfile = new FirefoxProfile();
ffProfile.addExtension(new File("firebug-1.11.4-fx.xpi"));
ffProfile.addExtension(new File("netExport-0.9b3.xpi"));

//设置默认的 Firefox 首选项 ffProfile.setPreference("app.update.enabled", false); String domain = "extensions.firebug.";

//设置默认的 Firebug 首选项 ffProfile.setPreference(domain + "currentVersion", "1.11.4"); ffProfile.setPreference(domain + "allPagesActivation", "on");
ffProfile.setPreference(domain + "defaultPanelName", "net"); ffProfile.setPreference(domain + "net.enableSites", true);

//设置默认的 NetExport 首选项 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,方法外实例化
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 = "har 的文件路径";
文件目录 = 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());
计数++;

FileUtils.cleanDirectory(目录);

关于ssl - 由于使用带有 BrowserMob 代理的 Selenium Webdriver 捕获 har 文件的 SSL 证书,无法加载资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17045946/

相关文章:

java - 网络 SSL : how to write a TrustManager

java - 如何将证书链和私钥导入java keystore

java - 服务器端的 Cookie 不起作用

android - 没有对等证书异常 - Volley 和具有自签名证书的 Android

java - 如何使用 Appium 向下滚动以单击特定元素,因为 scrollTo 不起作用

java - 在 Selenium Webdriver 中查找输入字段的标签

c# - 创建自签名 CA 证书并在 IIS 中安装

ssl - 可以在不重新颁发的情况下将 SSL 证书从 SHA1 移动到 SHA256 吗?

node.js - 在 localhost 上设置 (https) SSL 以进行 meteor 开发

java - 在 ExpectedExceptionMessageRegExp TestNG 中包含模式匹配