java - 如何使用selenium4获取.har文件或网络请求

标签 java selenium selenium-webdriver webdriver selenium4

正如我们所知,新版本 Selenium (4.0.0-alpha-2) 中添加的功能之一是 Java 中的 Chrome DevTools API 的一个非常好的接口(interface)。DevTools API 提供了控制浏览器和 Web 的强大功能交通

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

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

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

有人可以建议我如何开始收到所有请求吗?谢谢,提前

最佳答案

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

我认为您会发现这个测试示例很有帮助:

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;

关于java - 如何使用selenium4获取.har文件或网络请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58909528/

相关文章:

java - 创建一个返回集合中所有项目的数组(链接列表)的方法

google-chrome - Selenium WebDriverException : unknown error: call function result missing 'value' while calling sendkeys method

java - 当结果不同时如何进行单元测试?

javascript - 如何在 selenium 中单击 DatePicker 上的正确日期?

ruby-on-rails - ChromeDriver/菠菜/ Selenium 错误 : Failed to read the 'localStorage' property from 'Window' : Storage is disabled inside 'data:' URLs

java - 无法使用 Selenium Java 中的 sendKeys() 将文件上传到 "browse"按钮

intellij-idea - Intellij 中 WebDriverIO 的代码完成

java - org.openqa.selenium.InvalidArgumentException : unknown error: unsupported protocol

java - 如何为selenium java代码添加循环条件

java - 四个相同的 Selenium 测试给出不同的结果