在 C# 中获取 Selenium 中的请求标头

问题描述 投票:0回答:1

我有一个硒刮刀,可以打开网站并登录。该网站是由react或react native编写的,页面数据从API获取。 我希望当 selenium 打开浏览器并登录时也捕获 Get 和 Post 请求。 我想从 API 请求之一获取特定标头。

我尝试了很多方法,例如 browsermobproxy (与 .net 6 不兼容)和其他方法,但没有人能解决我的问题。 我也尝试过这个:

ChromeOptions options = new ChromeOptions();
options.AddArgument("user-data-dir=C:\\Users\\Test\\AppData\\Local\\Google\\Chrome\\User Data");

// Create a new ChromeDriver object.
IWebDriver driver = new ChromeDriver(options);

// Navigate to the target website.
driver.Navigate().GoToUrl("https://test.com/");

// Get the network requests.
List<NetworkRequest> requests = driver.GetNetworkRequests();

// Print the request details to the console.
foreach (NetworkRequest request in requests)
{
    Console.WriteLine($"Request URL: {request.Url}");
    Console.WriteLine($"Request Method: {request.Method}");
    Console.WriteLine($"Request Status Code: {request.StatusCode}");
    Console.WriteLine($"Request Headers:");
    foreach (var header in request.Headers)
    {
        Console.WriteLine($"  {header.Key}: {header.Value}");
    }
    Console.WriteLine();
}

// Close the browser.
driver.Quit();
c# selenium-webdriver monitoring
1个回答
0
投票

您可以将 devtools 与 chrome 驱动程序一起使用

using var driver = new ChromeDriver();

IDevTools devTools = driver;
DevToolsSession session = devTools.GetDevToolsSession();
await session.Domains.Network.EnableNetwork();

session.DevToolsEventReceived += OnDevToolsEventReceived;

void OnDevToolsEventReceived(object? sender, DevToolsEventReceivedEventArgs e)
{
    if (e.EventName == "requestWillBeSentExtraInfo")
    {
        var requestHeaders = e.EventData["headers"];
    }
    if (e.EventName == "responseReceivedExtraInfo")
    {
        var responseHeaders = e.EventData["headers"];
    }  
}

driver.Navigate().GoToUrl("https://stackoverflow.com/");
© www.soinside.com 2019 - 2024. All rights reserved.