Подскажите что за дичь происходит с массивом )

  • Автор темы Автор темы Shogo
  • Дата начала Дата начала

Shogo

Client
Регистрация
07.04.2015
Сообщения
510
Реакции
107
Баллы
43
Друзья, помогите решить головоломку )
Вот есть такой код, проверенный годами:
C#:
Развернуть Свернуть Копировать
var list = project.Lists["TEMP2"];
var traffic = instance.ActiveTab.GetTraffic();
foreach(var t in traffic) {
    if (System.Text.RegularExpressions.Regex.IsMatch(t.Url, @"hcaptcha")) {
        
string asd = System.Text.Encoding.UTF8.GetString(t.ResponseBody);
        list.Add(asd);
    }
}

Раньше работал и бед не знал, потом начал давать ошибки, но иногда, а сегодня прям постоянно.

Ошибку даёт такую: Выполнение действия CSharp OwnCode. Массив не может быть неопределенным. Имя параметра: bytes

Причём даёт её только когда находит что то , методом тыка выяснил что в строке 6. Самое интересное - информация не важна, хкапчу вставил для примера, глючит так везде. Если оставить долго работать - то ошибка пропадает. Всю голову уже сломал
 
Самое смешное, что прям сейчас работают два на 99% одинаковых шаблона, на одном эта ошибка почти постоянно, на другом её почти нет )
 
Друзья, помогите решить головоломку )
Вот есть такой код, проверенный годами:
C#:
Развернуть Свернуть Копировать
var list = project.Lists["TEMP2"];
var traffic = instance.ActiveTab.GetTraffic();
foreach(var t in traffic) {
    if (System.Text.RegularExpressions.Regex.IsMatch(t.Url, @"hcaptcha")) {
      
string asd = System.Text.Encoding.UTF8.GetString(t.ResponseBody);
        list.Add(asd);
    }
}

Раньше работал и бед не знал, потом начал давать ошибки, но иногда, а сегодня прям постоянно.

Ошибку даёт такую: Выполнение действия CSharp OwnCode. Массив не может быть неопределенным. Имя параметра: bytes

Причём даёт её только когда находит что то , методом тыка выяснил что в строке 6. Самое интересное - информация не важна, хкапчу вставил для примера, глючит так везде. Если оставить долго работать - то ошибка пропадает. Всю голову уже сломал
Попробуйте вместо var - использовать конкретный тип, есть подозрение, что var определяет например вместо string - double и поэтому будет бить ошибку. Ну это я так, в теории, что проблема может быть в универсальном var - который бывает опасен.
 
  • Спасибо
Реакции: gelu4 и Shogo
Друзья, помогите решить головоломку )
Вот есть такой код, проверенный годами:
C#:
Развернуть Свернуть Копировать
var list = project.Lists["TEMP2"];
var traffic = instance.ActiveTab.GetTraffic();
foreach(var t in traffic) {
    if (System.Text.RegularExpressions.Regex.IsMatch(t.Url, @"hcaptcha")) {
       
string asd = System.Text.Encoding.UTF8.GetString(t.ResponseBody);
        list.Add(asd);
    }
}

Раньше работал и бед не знал, потом начал давать ошибки, но иногда, а сегодня прям постоянно.

Ошибку даёт такую: Выполнение действия CSharp OwnCode. Массив не может быть неопределенным. Имя параметра: bytes

Причём даёт её только когда находит что то , методом тыка выяснил что в строке 6. Самое интересное - информация не важна, хкапчу вставил для примера, глючит так везде. Если оставить долго работать - то ошибка пропадает. Всю голову уже сломал
Есть догадка:
var list = project.Lists["TEMP2"]; Может вместо var указать тип данных?
 
  • Спасибо
Реакции: Dome4ta1, Alex.A и Shogo
C#:
Развернуть Свернуть Копировать
//string list = project.Lists["TEMP2"];
var traffic = instance.ActiveTab.GetTraffic();
foreach(var t in traffic) {
    if (System.Text.RegularExpressions.Regex.IsMatch(t.Url, @"hcaptcha")) {
       
string asd = System.Text.Encoding.UTF8.GetString(t.ResponseBody);
project.Variables["KEY"].Value=asd;
        //list.Add(asd);
    }
}

Вообще убрал список, ничего не изменилось
 
  • Спасибо
Реакции: Sho и djaga
C#:
Развернуть Свернуть Копировать
string asd = System.Text.Encoding.UTF8.GetString(t.ResponseBody);
:ce:
Тогда ещё t.ResponseBody.ToString()

А вообще лучше через VS проверить где крашится и добавить проверку.
В добавок можно ещё try..catch использовать.
 
try..catch сколько пробовал в зенку добавлять, у меня почему то не работает ) то ли руки кривые, то ли хз, но текст ошибки ни разу получить не смог.

Тогда ещё t.ResponseBody.ToString()
пробовал, но он же именно на массив ругается, сейчас на всякий ещё раз попробую
 
  • Спасибо
Реакции: djaga
Друзья, помогите решить головоломку )
Вот есть такой код, проверенный годами:
C#:
Развернуть Свернуть Копировать
var list = project.Lists["TEMP2"];
var traffic = instance.ActiveTab.GetTraffic();
foreach(var t in traffic) {
    if (System.Text.RegularExpressions.Regex.IsMatch(t.Url, @"hcaptcha")) {
       
string asd = System.Text.Encoding.UTF8.GetString(t.ResponseBody);
        list.Add(asd);
    }
}

Раньше работал и бед не знал, потом начал давать ошибки, но иногда, а сегодня прям постоянно.

Ошибку даёт такую: Выполнение действия CSharp OwnCode. Массив не может быть неопределенным. Имя параметра: bytes

Причём даёт её только когда находит что то , методом тыка выяснил что в строке 6. Самое интересное - информация не важна, хкапчу вставил для примера, глючит так везде. Если оставить долго работать - то ошибка пропадает. Всю голову уже сломал
в t.ResponseBody может не быть данных. например запрос тормозит по дороге. будет ошибка.
а это как раз и есть массив данных
 
  • Спасибо
Реакции: Sho и Shogo
в t.ResponseBody может не быть данных. например запрос тормозит по дороге. будет ошибка.
а это как раз и есть массив данных
Вооот, такое ощущение сложилось, при использовании мобильных прокси такое как раз чаще всего. Так а можно как то подождать этот запрос? потому что если делать паузу перед этим блоком, работает оно получще, реже ошибку даёт
 
пробовал, но он же именно на массив ругается, сейчас на всякий ещё раз попробую
Да это я не посмотрел какой там тип данных. Подсказка с .ToString() ошибка)
C#:
Развернуть Свернуть Копировать
//string list = project.Lists["TEMP2"];
var traffic = instance.ActiveTab.GetTraffic();
foreach(var t in traffic) {
    if (System.Text.RegularExpressions.Regex.IsMatch(t.Url, @"hcaptcha")) {
  
string asd = System.Text.Encoding.UTF8.GetString(t.ResponseBody);
project.Variables["KEY"].Value=asd;
        //list.Add(asd);
    }
}

Вообще убрал список, ничего не изменилось
Вот так верно:
C#:
Развернуть Свернуть Копировать
var traffic = instance.ActiveTab.GetTraffic();
foreach(var t in traffic)
{
    if (System.Text.RegularExpressions.Regex.IsMatch(t.Url, @"hcaptcha"))
    {
        if(t.ResponseBody == null) continue;
        string asd = System.Text.Encoding.UTF8.GetString(t.ResponseBody);
        project.Variables["KEY"].Value=asd;
        //list.Add(asd);
    }
}
upd: исправил опечатку с "hcaptcha"
 
Последнее редактирование:
Иии, ошибка никуда не делась )
 
  • Спасибо
Реакции: djaga
Да это я не посмотрел какой там тип данных. Подсказка с .ToString() ошибка)
Вот этот момент забыл, если убрать - ошибок нету, но и не находит ничего, постоянно даёт пустоту.
 
  • Спасибо
Реакции: djaga
Вооот, такое ощущение сложилось, при использовании мобильных прокси такое как раз чаще всего. Так а можно как то подождать этот запрос? потому что если делать паузу перед этим блоком, работает оно получще, реже ошибку даёт
https://zennolab.com/discussion/threads/zaciklit-get-traffic.102178/post-679364 там есть в коде ожидание запроса
 
  • Спасибо
Реакции: volody00, djaga и Shogo
о, спасибо вам огромное! Это то что искал
 
  • Спасибо
Реакции: djaga
Если я правильно понял, то так:
C#:
Развернуть Свернуть Копировать
instance.UseTrafficMonitoring = true; // можно удалить, использовалось для примера

var list = project.Lists["TEMP2"];
var traffic = instance.ActiveTab.GetTraffic();
foreach(var t in traffic)
{
    if (System.Text.RegularExpressions.Regex.IsMatch(t.Url, @"hcaptcha"))
    {
        t.WaitResponse(30,2);
        if(t.ResponseBody == null) continue;
        string asd = System.Text.Encoding.UTF8.GetString(t.ResponseBody);
        project.Variables["KEY"].Value = asd;
        list.Add(asd);
    }
}

upd: добавил коментарий.
 
Последнее редактирование:
Если я правильно понял, то так:
C#:
Развернуть Свернуть Копировать
instance.UseTrafficMonitoring = true;

var list = project.Lists["TEMP2"];
var traffic = instance.ActiveTab.GetTraffic();
foreach(var t in traffic)
{
    if (System.Text.RegularExpressions.Regex.IsMatch(t.Url, @"hcaptcha"))
    {
        t.WaitResponse(30,2);
        if(t.ResponseBody == null) continue;
        string asd = System.Text.Encoding.UTF8.GetString(t.ResponseBody);
        project.Variables["KEY"].Value = asd;
        list.Add(asd);
    }
}
похоже на правду...
но я бы instance.UseTrafficMonitoring = true; поставил до действий со страницей
и еще точно не помню, но разные типы запроса могут выдавать ошибку. типа не в каждом есть ResponseBody.... но это надо проверить.
 
  • Спасибо
Реакции: djaga
и еще точно не помню, но разные типы запроса могут выдавать ошибку. типа не в каждом есть ResponseBody.... но это надо проверить.
Да у меня один типа в данном проекте.
 
t.WaitResponse(30,2);
почему то срабатывает вообще всегда ) возможно потому что есть домены в блеклисте, и он ждёт когда они ответят
 
  • Спасибо
Реакции: Sho
Делайте проверки на null.
t.WaitResponse(30,2);
почему то срабатывает вообще всегда ) возможно потому что есть домены в блеклисте, и он ждёт когда они ответят
Да, м.б. фильтруйте по url.
 
  • Спасибо
Реакции: Shogo
хм, но по идее его
if (System.Text.RegularExpressions.Regex.IsMatch(t.Url, @"hcaptcha")) - не должен пропустить
 

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