如何使用Selenium4获取.har文件或网络请求

时间:2019-11-18 07:09:36

标签: java selenium selenium-webdriver webdriver selenium4

我们知道,新版本Selenium(4.0.0-alpha-2)中添加的功能之一是Java中Chrome DevTools API的非常漂亮的接口.DevTools API提供了用于控制浏览器和Web的强大功能流量

根据使用最新版本硒的文档,我们可以从会话中捕获网络请求。

在我使用browsermob来获取网络请求之前,不幸的是,他们几年没有更新它。

我正在寻找使用此selenium4开发工具API来获取所有内部请求的人。

有人可以建议我如何开始获得所有请求吗?谢谢,谢谢

1 个答案:

答案 0 :(得分:2)

您可以在gitHub的@adiohana存储库中找到selenium-chrome-devtools-examples的示例。

我认为您认为此测试示例很有帮助:

public class ChromeDevToolsTest {

    private static ChromeDriver chromeDriver;
    private static DevTools chromeDevTools;

    @BeforeClass
    public static void initDriverAndDevTools() {

        chromeDriver = new ChromeDriver();
        // dev-tools handler
        chromeDevTools = chromeDriver.getDevTools();
        chromeDevTools.createSession();

    }

    @Test
    public void interceptRequestAndContinue() {

        //enable Network
        chromeDevTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));

        //add listener to intercept request and continue
        chromeDevTools.addListener(Network.requestIntercepted(),
                requestIntercepted -> chromeDevTools.send(
                        Network.continueInterceptedRequest(requestIntercepted.getInterceptionId(),
                                Optional.empty(),
                                Optional.empty(),
                                Optional.empty(), Optional.empty(),
                                Optional.empty(),
                                Optional.empty(), Optional.empty())));

        //set request interception only for css requests
        RequestPattern requestPattern = new RequestPattern("*.css", ResourceType.Stylesheet, InterceptionStage.HeadersReceived);
        chromeDevTools.send(Network.setRequestInterception(ImmutableList.of(requestPattern)));

        chromeDriver.get("https://apache.org");

    }

您需要添加以下导入:

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.devtools.Command;
import org.openqa.selenium.devtools.Console;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.network.Network;
import org.openqa.selenium.devtools.network.model.BlockedReason;
import org.openqa.selenium.devtools.network.model.InterceptionStage;
import org.openqa.selenium.devtools.network.model.RequestPattern;
import org.openqa.selenium.devtools.network.model.ResourceType;
import org.openqa.selenium.devtools.security.Security;

import java.util.Optional;