簡體   English   中英

使用 selenium webdriver java 4.0v 捕獲網絡流量

[英]Capture network traffic using selenium webdriver java 4.0v

我想捕獲在 Chromedriver 窗口中生成的網絡流量。 我發現它可以使用 selenium 4.0 DevTools 實用程序來完成,但我找不到方法或好的文檔。

https://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/devtools/DevTools.html

有沒有最簡單的方法? 謝謝

在此處輸入圖片說明

您可以使用LoggingPreferencesChromeOptions完成此操作

進口

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.logging.LogEntries;
import org.openqa.selenium.logging.LogEntry;
import org.openqa.selenium.logging.LogType;
import org.openqa.selenium.logging.LoggingPreferences;
import org.openqa.selenium.remote.CapabilityType;

在這里,我們得到 Json 字符串,其中包含有關日志記錄的數據。 我使用json-simple庫將接收到的 json 字符串轉換為 JSONObject。

LoggingPreferences preferences = new LoggingPreferences();
preferences.enable(LogType.PERFORMANCE, Level.ALL);

ChromeOptions option = new ChromeOptions();
option.setCapability(CapabilityType.LOGGING_PREFS, preferences);
option.setCapability("goog:loggingPrefs", preferences);
option.addArguments();

System.setProperty("webdriver.chrome.driver", "chrome_driver_path");

ChromeDriver chromeDriver = new ChromeDriver(option);
chromeDriver.manage().window().maximize();
this.driver = chromeDriver;


driver.get("website_url");

LogEntries logs = driver.manage().logs().get(LogType.PERFORMANCE);
for (LogEntry entry : logs) {
    JSONParser parser = new JSONParser();
    JSONObject jsonObject = null;
    try {
        jsonObject = (JSONObject) parser.parse(entry.getMessage());
    } catch (ParseException e) {
        e.printStackTrace();
    }
    JSONObject messageObject = (JSONObject) jsonObject.get("message");
    System.out.println(messageObject.toJSONString());
    // You can do the required processing to messageObject
}

您可以使用 json 字符串中的type (XHR、腳本、樣式表)從日志中過濾網絡調用的type

for (LogEntry entry : logs) {
   if(entry.toString().contains("\"type\":\"XHR\"")) {
   }
}

這是一個使用 Selenium 4 提供的新 DevTools 協議 (CDP) 的簡單示例(此代碼使用 Beta-4 版本和適用於 Chrome 91 的 CDP)

            :
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.v91.network.*;
            :
            
    DevTools devTools = ((ChromiumDriver) driver).getDevTools();
    devTools.createSession();
    devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));
    
    devTools.addListener(Network.requestWillBeSent(), entry -> {
                System.out.println("Request (id) URL      : (" + entry.getRequestId() + ") " 
                        + entry.getRequest().getUrl()
                        + " (" + entry.getRequest().getMethod() + ")");
            });
    
    devTools.addListener(Network.responseReceived(), entry -> {
                System.out.println("Response (Req id) URL : (" + entry.getRequestId() + ") " 
                        + entry.getResponse().getUrl()
                        + " (" + entry.getResponse().getStatus() + ")");
            }); 
    
    driver.get("someurl");  // on so on ... 

    

使用 Selenium 4,您可以獲得請求 URL 和響應 URL 等。

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.0.0</version>
</dependency>

<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>4.3.1</version>
</dependency>

使用此代碼段,您將獲得所有請求和響應。


    @BeforeEach
    public void setUp() {
        WebDriverManager.chromedriver().setup();
        this.chromeDriver = new ChromeDriver();
        devTools = chromeDriver.getDevTools();
        devTools.createSession();
    }

    @Test
    public void getRequestsAndResponseUrls() throws InterruptedException {
        devTools.send(new Command<>("Network.enable", ImmutableMap.of()));
;
        devTools.addListener(Network.responseReceived(), l -> {
            System.out.print("Response URL: ");
            System.out.println(l.getResponse().getUrl());
        });
        devTools.addListener(Network.requestWillBeSent(), l -> {
            System.out.print("Request URL: ");
            System.out.println(l.getRequest().getUrl());
        });

        chromeDriver.get("https://edition.cnn.com/");

        // While Thread.sleep you you will see requests and responses appearing in console. 
        Thread.sleep(10000);
    }

享受。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM