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

Shogo

Client
Регистрация
07.04.2015
Сообщения
474
Благодарностей
100
Баллы
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. Самое интересное - информация не важна, хкапчу вставил для примера, глючит так везде. Если оставить долго работать - то ошибка пропадает. Всю голову уже сломал
 

Shogo

Client
Регистрация
07.04.2015
Сообщения
474
Благодарностей
100
Баллы
43
Самое смешное, что прям сейчас работают два на 99% одинаковых шаблона, на одном эта ошибка почти постоянно, на другом её почти нет )
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 521
Благодарностей
1 319
Баллы
113
Друзья, помогите решить головоломку )
Вот есть такой код, проверенный годами:
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

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
549
Благодарностей
1 130
Баллы
93
Друзья, помогите решить головоломку )
Вот есть такой код, проверенный годами:
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

Shogo

Client
Регистрация
07.04.2015
Сообщения
474
Благодарностей
100
Баллы
43
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

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
549
Благодарностей
1 130
Баллы
93
C#:
string asd = System.Text.Encoding.UTF8.GetString(t.ResponseBody);
:ce:
Тогда ещё t.ResponseBody.ToString()

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

Shogo

Client
Регистрация
07.04.2015
Сообщения
474
Благодарностей
100
Баллы
43
try..catch сколько пробовал в зенку добавлять, у меня почему то не работает ) то ли руки кривые, то ли хз, но текст ошибки ни разу получить не смог.

Тогда ещё t.ResponseBody.ToString()
пробовал, но он же именно на массив ругается, сейчас на всякий ещё раз попробую
 
  • Спасибо
Реакции: djaga

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Друзья, помогите решить головоломку )
Вот есть такой код, проверенный годами:
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

Shogo

Client
Регистрация
07.04.2015
Сообщения
474
Благодарностей
100
Баллы
43
в t.ResponseBody может не быть данных. например запрос тормозит по дороге. будет ошибка.
а это как раз и есть массив данных
Вооот, такое ощущение сложилось, при использовании мобильных прокси такое как раз чаще всего. Так а можно как то подождать этот запрос? потому что если делать паузу перед этим блоком, работает оно получще, реже ошибку даёт
 

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
549
Благодарностей
1 130
Баллы
93
пробовал, но он же именно на массив ругается, сейчас на всякий ещё раз попробую
Да это я не посмотрел какой там тип данных. Подсказка с .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"
 
Последнее редактирование:

Shogo

Client
Регистрация
07.04.2015
Сообщения
474
Благодарностей
100
Баллы
43
  • Спасибо
Реакции: djaga

Shogo

Client
Регистрация
07.04.2015
Сообщения
474
Благодарностей
100
Баллы
43
Иии, ошибка никуда не делась )
 
  • Спасибо
Реакции: djaga

Shogo

Client
Регистрация
07.04.2015
Сообщения
474
Благодарностей
100
Баллы
43
Да это я не посмотрел какой там тип данных. Подсказка с .ToString() ошибка)
Вот этот момент забыл, если убрать - ошибок нету, но и не находит ничего, постоянно даёт пустоту.
 
  • Спасибо
Реакции: djaga

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Вооот, такое ощущение сложилось, при использовании мобильных прокси такое как раз чаще всего. Так а можно как то подождать этот запрос? потому что если делать паузу перед этим блоком, работает оно получще, реже ошибку даёт
https://zennolab.com/discussion/threads/zaciklit-get-traffic.102178/post-679364 там есть в коде ожидание запроса
 
  • Спасибо
Реакции: volody00, djaga и Shogo

Shogo

Client
Регистрация
07.04.2015
Сообщения
474
Благодарностей
100
Баллы
43
о, спасибо вам огромное! Это то что искал
 
  • Спасибо
Реакции: djaga

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
549
Благодарностей
1 130
Баллы
93
Если я правильно понял, то так:
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: добавил коментарий.
 
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Если я правильно понял, то так:
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

Shogo

Client
Регистрация
07.04.2015
Сообщения
474
Благодарностей
100
Баллы
43
и еще точно не помню, но разные типы запроса могут выдавать ошибку. типа не в каждом есть ResponseBody.... но это надо проверить.
Да у меня один типа в данном проекте.
 

Shogo

Client
Регистрация
07.04.2015
Сообщения
474
Благодарностей
100
Баллы
43
t.WaitResponse(30,2);
почему то срабатывает вообще всегда ) возможно потому что есть домены в блеклисте, и он ждёт когда они ответят
 
  • Спасибо
Реакции: Sho

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
Делайте проверки на null.
t.WaitResponse(30,2);
почему то срабатывает вообще всегда ) возможно потому что есть домены в блеклисте, и он ждёт когда они ответят
Да, м.б. фильтруйте по url.
 
  • Спасибо
Реакции: Shogo

Shogo

Client
Регистрация
07.04.2015
Сообщения
474
Благодарностей
100
Баллы
43

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
  • Спасибо
Реакции: djaga

Shogo

Client
Регистрация
07.04.2015
Сообщения
474
Благодарностей
100
Баллы
43
хм, но по идее его
if (System.Text.RegularExpressions.Regex.IsMatch(t.Url, @"hcaptcha")) - не должен пропустить
 

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