提问人:Mohammad Ebrahimi 提问时间:11/5/2023 最后编辑:Brian Tompsett - 汤莱恩Mohammad Ebrahimi 更新时间:11/12/2023 访问量:59
在 C 中获取 selenium 中请求的标头#
Get the Headers of Requests in selenium at C#
问:
我有一个硒刮板,可以打开站点并登录它。该网站是由 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();
答:
0赞
ggeorge
11/9/2023
#1
您可以将 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/");
0赞
Mohammad Ebrahimi
11/12/2023
#2
我用这个,它解决了我的问题
ChromeOptions options = new ChromeOptions();
options.SetLoggingPreference("performance", LogLevel.All);
options.AddArgument("user-data-dir=C:\\Users\\Test\\AppData\\Local\\Google\\Chrome\\User Data");
IWebDriver driver = new ChromeDriver(options);
driver.Navigate().GoToUrl("https://test.com/");
var performanceLogs = driver.Manage().Logs.GetLog("performance");
// Find Specific Request
var jsonText = performanceLogs.Where(p => p.Message.Contains("some of the api url or the header name")).FirstOrDefault();
//Header
string pattern = "\"The Header Name\":\"([^\"]+)\"";
Match match = Regex.Match(jsonText.ToString(), pattern);
string Header= "";
if (match.Success)
{
Header= match.Groups[1].Value;
Console.WriteLine("Header: " + Header);
}
else
{
Console.WriteLine("Header not found.");
}
driver.Quit();
评论