Поймать все редиректы из url c#

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Реакции
23
Баллы
18
Стоит задача поймать все редиректы и записать их, например в список.
Пробовал вот такую штуку, в итоге получаю 100 строчек уже после всех редиректов.
Что нужно исправить чтобы поймать все редиректы?
Пробовал и так
C#:
Развернуть Свернуть Копировать
project.Lists["list"].Clear();
int t = 0;
Tab tab = instance.ActiveTab;
System.Threading.Thread.Sleep(500);
tab.Navigate("site.ru", "");

while(t<100)
{
string url = tab.URL;
project.Lists["list"].Add(url);
    t=t+1;
}
и так
C#:
Развернуть Свернуть Копировать
project.Lists["list"].Clear();
int t = 0;
System.Threading.Thread.Sleep(500);
instance.ActiveTab.Navigate("site.ru", "");

while(t<100)
{
string url = instance.ActiveTab.URL;
project.Lists["list"].Add(url);
    t=t+1;
}
Где ошибка, что не учитываю?
Выручайте плиз.
Спасибо
 
ну наверно потому что Navigate не сразу возвращает управление в код, а спустя какое то время. и за то время пока она там исполняется все уже устаканилось.
возможно даже что редиректы даже не успевают отобразиться в ActiveTab.URL так как само по себе обращение к браузеру ну очень затратное по времени операция.
можно посоветовать попробовать проанализировать данные в из монитора трафика.
 
  • Спасибо
Реакции: arbplv
Перед открытием страницы, надо выполнять instance.UseTrafficMonitoring = true;

Пока имеется баг, который не позволяет собрать все редиректы.
 
Последнее редактирование:
  • Спасибо
Реакции: arbplv
Перед открытием страницы, надо выполнять instance.UseTrafficMonitoring = true;

У хрома пока имеется баг, который не позволяет собрать все редиректы.
C#:
Развернуть Свернуть Копировать
project.Lists["list"].Clear();
int t = 0;
System.Threading.Thread.Sleep(500);
instance.UseTrafficMonitoring = true;
instance.ActiveTab.Navigate("site", "");

while(t<100)
{
string url = instance.ActiveTab.URL;
project.Lists["time_events"].Add(url);
    t=t+1;
}

Вот так попробовал, ничего не изменилось. Движок хром. В окне трафика вижу все редиректы, в список чет они не хотят складываться. Где может быть ошибка?
 
Пока имеется баг, который не позволяет собрать все редиректы.
Есть таска.
 
Если сайт позволяет - попробуйте.
Поменял движок на файрфокс, взял с того топика код, но у меня чет он не работает
Посмотрите все ли я правильно понимаю
C#:
Развернуть Свернуть Копировать
instance.UseTrafficMonitoring = true;//активируем запись трафика
instance.ActiveTab.Navigate("site.ru", "");//переходим на стриницу с которой будем редиректится
string url_pattern = "yandex.ru"; //то что мы ищем среди всех редиректов, к примеру тут мы ищем редирект на яндекс
var traffic = instance.ActiveTab.GetTraffic();//получаем трафик в эту переменную, какой то массив
foreach(TrafficItem t in traffic) //пробегаемся по каждой строчке этого массива
{
    if (t.Url.Contains(url_pattern)) // смотрим есть ли в урл "yandex.ru"
    {
        project.Variables["var1"].Value = System.Text.Encoding.UTF8.GetString(t.ResponseBody);//записали в программную переменную
        project.SendInfoToLog("успех", false);//в лог успех
        return 0;
    }
}
throw new Exception("фиаско");//если не нашли
Что делаю не так?
Можно ли всю переменную засунуть в список или куда нидь, хоть глянуть что там есть и как искать, я пробовал у меня ошибку выдает2020-10-04_20-09-05.jpg
 
Почитал документацию, взял инфу оттуда, все работает, видимо была где от ошибка...
Еще вопрос
Нужно ли после того как взял ссылку из редиректов отключать дополнительный сбор трафика? instance.UseTrafficMonitoring = false? 18 строчка в коде
C#:
Развернуть Свернуть Копировать
instance.UseTrafficMonitoring = true;
Tab tab = instance.ActiveTab;
tab.Navigate("site.ru", "");
if (tab.IsBusy) tab.WaitDownloading();
// get list of requests
var traffic = instance.ActiveTab.GetTraffic();
// get some data from items and log it
foreach(var t in traffic)
    if(t.Url.Contains(@"sport"))
    {
    //project.SendInfoToLog(string.Format("Url: {0}\r\n Method: {1}\r\n Result: {2}", t.Url, t.Method, t.ResultCode));
    project.Lists["time_events"].Add(t.Url);
    }
// get list of request second time
traffic = instance.ActiveTab.GetTraffic();
// print count of items, it will be 0, because the previous method call removed the old items
project.SendInfoToLog("Second count of traffic elements = " + traffic.Count());
    instance.UseTrafficMonitoring = false;
 
Нужно ли после того как взял ссылку из редиректов отключать дополнительный сбор трафика? instance.UseTrafficMonitoring = false? 18 строчка в коде
Это на твое усмотрение. Вообще не обязательно ))
 
Нужно поменять движок и попробовать на файрфоксе?
У меня наоборот firefox по умолчанию и то работал, то не работал отлов запросов. А переключил на chrome и пока вроде всё нормально. Поэтому эксперементируйте сменой движков.
Всю голову сломал уже) Почему то ловит запросы то нет... а оказалось баг
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)