如何在没有自动导出的情况下使用 selenium webdriver 从 java 生成 Har 文件?
How to generate Har file from java using selenium webdriver without autoexport?
我在 selenium 中使用 netexport api 和 firebug 进行自动化。
有两种情况。
- 自动导出:我在 java 中使用 FF 自定义配置文件启用了此选项,一旦页面加载完成,就会自动生成 har 文件。我也可以解析文件。
2.Some 页面有 Ajax 调用及其更新响应,特别是 DIV 。因此,由于页面未加载,我无法 capture/save 特定 ajax 请求(REST 服务)的 har 文件。我想要 request/response 详细信息。
是否可以在java中从selenium webdriver手动导出har文件?
如果我们在 selenium webdriver(java) 中有任何 command/function 会很好,它将 return har 文件或 json 字符串,我们可以随时调用它必需的。
为每次页面加载生成 har 文件的自动导出选项。
https://groups.google.com/forum/#!topic/http-archive-specification/73jf6K_FK3c
找到了使用 AutoIt 脚本从 java 手动导出 har 文件的解决方法。
需要在Firefox中启用firebug插件,默认显示网络面板视图,我们可以选择手动导出har文件。
通过使用Autoit工具,我们可以记录手册导出函数并编译将给出 .exe 文件的脚本,我们可以从 java 调用 exe 文件。
将 PhantomJS 与 BrowserMobProxy 结合使用。 PhantomJS 帮助我们 JavaScript 启用页面。以下代码也适用于 HTTPS 网址。
将'phantomjs.exe'放在C盘,你会在C盘本身得到'HAR-Information.har'文件。
确保 不要 在 url 的末尾放置 ' / ',例如
driver.get("https://www.google.co.in/")
应该是
driver.get("https://www.google.co.in");
否则不行
package makemyhar;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import net.lightbody.bmp.BrowserMobProxy;
import net.lightbody.bmp.BrowserMobProxyServer;
import net.lightbody.bmp.core.har.Har;
import net.lightbody.bmp.proxy.CaptureType;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriverService;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
public class MakeMyHAR {
public static void main(String[] args) throws IOException, InterruptedException {
//BrowserMobProxy
BrowserMobProxy server = new BrowserMobProxyServer();
server.start(0);
server.setHarCaptureTypes(CaptureType.getAllContentCaptureTypes());
server.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
server.newHar("Google");
//PHANTOMJS_CLI_ARGS
ArrayList<String> cliArgsCap = new ArrayList<>();
cliArgsCap.add("--proxy=localhost:"+server.getPort());
cliArgsCap.add("--ignore-ssl-errors=yes");
//DesiredCapabilities
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
capabilities.setCapability(CapabilityType.SUPPORTS_JAVASCRIPT, true);
capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliArgsCap);
capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,"C:\phantomjs.exe");
//WebDriver
WebDriver driver = new PhantomJSDriver(capabilities);
driver.get("https://www.google.co.in");
//HAR
Har har = server.getHar();
FileOutputStream fos = new FileOutputStream("C:\HAR-Information.har");
har.writeTo(fos);
server.stop();
driver.close();
}
}
我在 selenium 中使用 netexport api 和 firebug 进行自动化。
有两种情况。
- 自动导出:我在 java 中使用 FF 自定义配置文件启用了此选项,一旦页面加载完成,就会自动生成 har 文件。我也可以解析文件。
2.Some 页面有 Ajax 调用及其更新响应,特别是 DIV 。因此,由于页面未加载,我无法 capture/save 特定 ajax 请求(REST 服务)的 har 文件。我想要 request/response 详细信息。
是否可以在java中从selenium webdriver手动导出har文件?
如果我们在 selenium webdriver(java) 中有任何 command/function 会很好,它将 return har 文件或 json 字符串,我们可以随时调用它必需的。
为每次页面加载生成 har 文件的自动导出选项。
https://groups.google.com/forum/#!topic/http-archive-specification/73jf6K_FK3c
找到了使用 AutoIt 脚本从 java 手动导出 har 文件的解决方法。
需要在Firefox中启用firebug插件,默认显示网络面板视图,我们可以选择手动导出har文件。
通过使用Autoit工具,我们可以记录手册导出函数并编译将给出 .exe 文件的脚本,我们可以从 java 调用 exe 文件。
将 PhantomJS 与 BrowserMobProxy 结合使用。 PhantomJS 帮助我们 JavaScript 启用页面。以下代码也适用于 HTTPS 网址。
将'phantomjs.exe'放在C盘,你会在C盘本身得到'HAR-Information.har'文件。
确保 不要 在 url 的末尾放置 ' / ',例如
driver.get("https://www.google.co.in/")
应该是
driver.get("https://www.google.co.in");
否则不行
package makemyhar;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import net.lightbody.bmp.BrowserMobProxy;
import net.lightbody.bmp.BrowserMobProxyServer;
import net.lightbody.bmp.core.har.Har;
import net.lightbody.bmp.proxy.CaptureType;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriverService;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
public class MakeMyHAR {
public static void main(String[] args) throws IOException, InterruptedException {
//BrowserMobProxy
BrowserMobProxy server = new BrowserMobProxyServer();
server.start(0);
server.setHarCaptureTypes(CaptureType.getAllContentCaptureTypes());
server.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
server.newHar("Google");
//PHANTOMJS_CLI_ARGS
ArrayList<String> cliArgsCap = new ArrayList<>();
cliArgsCap.add("--proxy=localhost:"+server.getPort());
cliArgsCap.add("--ignore-ssl-errors=yes");
//DesiredCapabilities
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
capabilities.setCapability(CapabilityType.SUPPORTS_JAVASCRIPT, true);
capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliArgsCap);
capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,"C:\phantomjs.exe");
//WebDriver
WebDriver driver = new PhantomJSDriver(capabilities);
driver.get("https://www.google.co.in");
//HAR
Har har = server.getHar();
FileOutputStream fos = new FileOutputStream("C:\HAR-Information.har");
har.writeTo(fos);
server.stop();
driver.close();
}
}