Почему в массиве максимум [13]?
Я пытаюсь отследить request headers, для этого я использую selenium https://pastebin.com/VyKYe6rP вот здесь подробно все есть, все работает хорошо, но в result у меня максимальное количество объектов 13.
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private static IWebDriver Driver = null;
private static IDevTools Tools = null;
private static IDevToolsSession Session = null;
private static DevToolsVer.DevToolsSessionDomains Domains = null;
//private static ConcurrentBag<Task<Response>> CollectionXHR = null;
private static ConcurrentBag<Task<Response>> CollectionXHR = null;
public struct Response
{
public string RequestId { get; set; }
public string ResponseUrl { get; set; }
public long ResponseStatus { get; set; }
public bool ResponseBodySuccess { get; set; }
public string ResponseBody { get; set; }
public object Headers { get; set; }
}
public struct Request
{
public string RequestId { get; set; }
public string RequestURL { get; set; }
public long Status_Code { get; set; }
public bool ResponseBodySuccess { get; set; }
public string RequestBody { get; set; }
public object Headers { get; set; }
}
private /*static*//* async Task*/ void Main()
{
// Инициализация
Driver = new ChromeDriver();
Driver.Manage().Timeouts().ImplicitWait = new TimeSpan(0, 0, 10);
Driver.Manage().Timeouts().AsynchronousJavaScript = new TimeSpan(0, 0, 30);
Driver.Manage().Timeouts().PageLoad = new TimeSpan(0, 0, 30);
Driver.Manage().Window.Maximize();
Tools = Driver as IDevTools;
Session = Tools.GetDevToolsSession();
Domains = Session.GetVersionSpecificDomains<DevToolsVer.DevToolsSessionDomains>();
/*await*/ Domains.Network.Enable(new DevToolsVer.Network.EnableCommandSettings());
// Подготавливаем хранилище данных
CollectionXHR = new ConcurrentBag<Task<Response>>();
// Включаем запись получаемых данных
Domains.Network.ResponseReceived += ResponseReceived;
// Какие-то действия на сайте
Web();
// Отключаем запись получаемых данных
Domains.Network.ResponseReceived -= ResponseReceived;
// Ожидаем завершение извлечения полученных данных
Task.WaitAll(CollectionXHR.ToArray());
// Количество неудачных извлечений полученных данных
//var failResponseBody = CollectionXHR.Where(w => w.Result.ResponseBodySuccess == true).Count();
var failResponseBody = CollectionXHR.Where(w => w.Result.ResponseBodySuccess == true).Count();
// Выводим данные неудачных извлечений полученных данных
string failDescr = string.Empty;
foreach (var i in CollectionXHR.Where(w => w.Result.ResponseBodySuccess == true).ToList())
{
failDescr += $"RequestId = {i.Result.RequestId} | ResponseStatus = {i.Result.ResponseStatus} | ResponseBody = {i.Result.ResponseBody} | Test = {"{"+i.Result.Headers+"}"} \n";
Console.WriteLine(failDescr);
}
}
private static void ResponseReceived(object sender, DevToolsVer.Network.ResponseReceivedEventArgs e)
{
if (e.Type == DevToolsVer.Network.ResourceType.XHR)
{
CollectionXHR.Add(GetResponseBodyAsync(e));
}
}
private static async Task<Response> GetResponseBodyAsync(DevToolsVer.Network.ResponseReceivedEventArgs e)
{
try
{
var cmd = new DevToolsVer.Network.GetResponseBodyCommandSettings();
cmd.RequestId = e.RequestId;
var data = await Domains.Network.GetResponseBody(cmd);
return new Response()
{
RequestId = e.RequestId,
ResponseUrl = e.Response.Url,
ResponseStatus = e.Response.Status,
ResponseBodySuccess = true,
ResponseBody = data.ToString()
};
}
catch
{
return new Response()
{
RequestId = e.RequestId,
ResponseUrl = e.Response.Url,
ResponseStatus = e.Response.Status,
ResponseBodySuccess = false,
ResponseBody = null
};
}
}
private static void Web()
{
// Переходим на instagram.com
MessageBox.Show("1");
Driver.Navigate().GoToUrl("https://www.instagram.com");
MessageBox.Show("1");
}
То есть, если отследить запрос через инструмент разработчика

request headers может содержать более [13] строк(keys, value).
во всех запросах, которое мне удается получить и прочесть request headers всегда не более[13] объектов
Таким образом я делал хранилище для headers:
public static ConcurrentBag<Task<Request>> CollectionXHR = null;
public class Request
{
public object headers { get; set; }
public Dictionary<string, string> Headers1 = new Dictionary<string, string>();//так же это еще один из вариантов хранение полученных данных
}
таким способ я добавляю это в хранилище
Task.WaitAll(CollectionXHR.ToArray());
Но мне удается получать только массив из [13].
Возможно это поможет вам понять или узнать что то большее
// Подготавливаем хранилище данных
CollectionXHR = new ConcurrentBag<Task<Request>>();
// Включаем запись получаемых данных
Domains.Network.RequestWillBeSent += ResponseReceived;
regresh();// Какие-то действия на сайте
Task.WaitAll(CollectionXHR.ToArray());
private static void ResponseReceived(object sender, DevToolsVer.Network.RequestWillBeSentEventArgs e)
{
if (e.Type == DevToolsVer.Network.ResourceType.XHR)
{
CollectionXHR.Add(GetResponseBodyAsync(e));
}
}
private static async Task<Request> GetResponseBodyAsync(DevToolsVer.Network.RequestWillBeSentEventArgs e)
{
try
{
var cmd = new DevToolsVer.Network.GetRequestPostDataCommandSettings();
cmd.RequestId = e.RequestId;
var data = await Domains.Network.GetRequestPostData(cmd);
return new Request()
{
Headers1 = e.Request.Headers,
};
}
catch
{
return new Request()
{
Headers1 = e.Request.Headers,
};
}
}
В чем может быть дело?