首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium获取.har文件

Selenium获取.har文件
EN

Stack Overflow用户
提问于 2015-03-16 15:54:56
回答 4查看 16.4K关注 0票数 8

我有一个两页的申请:

/login

/profile

我想得到.har文件页/profile

当我转到/login页面时,cookie是用key=connect.sid和key=connect.sid=“示例值”创建的。此cookie尚未激活。我用active connect.sid添加了cookie。

代码语言:javascript
复制
WebDriver webDriver = getDriver();
webDriver.get(LOGIN_PAGE);
webDriver.manage().addCookie(connectsSId);

它不能工作,因为在加载页面之后,/login发现了一个新的cookie。我也尝试过这个代码:

代码语言:javascript
复制
WebDriver webDriver = getDriver();
webDriver.get(PROFILE_PAGE);
webDriver.manage().deleteAllCookies();
webDriver.manage().addCookie(connectsSId);

但这是行不通的。添加了饼干,但似乎为时已晚。

代码语言:javascript
复制
 WebDriver webDriver = getDriver();
 LoginPage loginPage = new LoginPage(getDriver());
 LandingPage landingPage = loginPage.login();
 landingPage.openProfilePage();

此代码为页面.har /login创建了一个文件。

由于某种原因,只有在第一次调用页面之后才创建该文件。我解决不了这个问题。

EN

回答 4

Stack Overflow用户

发布于 2017-06-10 14:49:14

将PhantomJS与BrowserMobProxy结合使用。PhantomJS帮助我们实现JavaScript启用页面。下面的代码也适用于HTTPS的网址。

'phantomjs.exe'放置在C驱动器中,然后在C驱动器本身中获取'HAR-Information.har'文件。

确保您的不将‘/ '放在url的末尾,如

代码语言:javascript
复制
driver.get("https://www.google.co.in/")

它应该是

代码语言:javascript
复制
driver.get("https://www.google.co.in");

否则就没用了。

代码语言:javascript
复制
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();
    }
}
票数 2
EN

Stack Overflow用户

发布于 2018-02-26 13:18:59

在Selenium代码中设置首选项:

代码语言:javascript
复制
    profile.setPreference("devtools.netmonitor.har.enableAutoExportToFile", true);
profile.setPreference("devtools.netmonitor.har.defaultLogDir", String.valueOf(dir));
profile.setPreference("devtools.netmonitor.har.defaultFileName", "network-log-file-%Y-%m-%d-%H-%M-%S");

并打开控制台:

代码语言:javascript
复制
Actions keyAction = new Actions(driver);
keyAction.keyDown(Keys.LEFT_CONTROL).keyDown(Keys.LEFT_SHIFT).sendKeys("q").keyUp(Keys.LEFT_CONTROL).keyUp(Keys.LEFT_SHIFT).perform();
票数 2
EN

Stack Overflow用户

发布于 2015-05-15 22:03:57

可以使用浏览器代理来捕获所有请求和响应数据( 看这里 )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29081290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档