Постоянно вылетает ошибка: Заданный аргумент находится вне диапазона допустимых значений.

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

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 142
Реакции
196
Баллы
63
Выполнение действия CSharp OwnCode: Работа с bukvariks. Заданный аргумент находится вне диапазона допустимых значений.
Имя параметра: i

Какой аргумент, где его искать?

Собственно, в чем может быть вопрос?
C#:
Развернуть Свернуть Копировать
Tab tab = instance.ActiveTab;
Random rnd = new Random();

//1. Заходим в wordstat, получаем частотность ключевого слова WS_frequency
string keyword = Convert.ToString(project.Variables["keyphrase"].Value);
string uniq = Convert.ToString(project.Variables["uniq"].Value);
string bukvar_check = project.Variables["bukvar_check"].Value;
string wordstat_frequency = project.Variables["wordstat_frequency"].Value;
int keys_count = Convert.ToInt32(project.Variables["tab_count"].Value);

project.SendInfoToLog("Заходим в букварикс, используем ключ " + keyword, true);
tab.Navigate("https://www.bukvarix.com/bukvarix_keywords_example.html");
tab.WaitDownloading();

for(int k=0; k<=keys_count;k++){
    
    //Берем данные из таблицы
    lock(SyncObjects.TableSyncer){
  
        // берем первую строку с удалением и раскидываем значения по переменным
        var row = project.Tables["Site_report"].GetRow(0).ToList();
        project.Tables["Site_report"].DeleteRow(0);
        project.Variables["target_domain"].Value = row[0];
        project.Variables["keyphrase"].Value = row[1];
        project.Variables["region"].Value = row[2];
        project.Variables["dom_zone"].Value = row[3];
        project.Variables["competitor"].Value = row[4];
    }
    
    tab.KeyEvent("a", "press", "ctrl");
    Thread.Sleep(rnd.Next(100,500));
    tab.KeyEvent("DELETE", "press", "");
    Thread.Sleep(rnd.Next(200,900));
    project.SendInfoToLog("Вводим ключ " + keyword, true);
    instance.SendText(keyword, 21);
    tab.KeyEvent("enter", "press", "");
    
    //Проверяем, есть ли частотность по ключу
    string regex = @"(?<=<td\ colspan='5'\ class='dataTables_empty'\ valign='top'>).*(?=</td></tr></tbody></table></div>)";
    string text =  tab.DomText;
    var reg = new System.Text.RegularExpressions.Regex(regex);
    bukvar_check = reg.Matches(text)[0].ToString();
    
    if (bukvar_check == "Нет результатов"){
        project.SendInfoToLog("Не найдена частота для ключевого слова " + keyword + " берем другой", true);
        tab.KeyEvent("a", "press", "ctrl");
        Thread.Sleep(rnd.Next(100,500));
        tab.KeyEvent("DELETE", "press", "");
        Thread.Sleep(rnd.Next(200,900));
        project.SendInfoToLog("Вводим ключ " + keyword, true);
        instance.SendText(keyword, 21);
        tab.KeyEvent("enter", "press", "");
    }else{
        Thread.Sleep(800);
    
        //Парсим частотность по нужному ключевому слову
        project.SendInfoToLog("Парсим частотность ключа", true);
        
        //выдергиваем первое значение
        string regex2 = @"(?<=</td><td\ class='\ dt-body-right'>).*?(?=</td><td\ class='\ dt-body-right'>)"; // в кавычках заключаем регулярное выражение
        string text2 =  tab.DomText;
        var reg2 = new System.Text.RegularExpressions.Regex(regex2);
        wordstat_frequency = reg2.Matches(text2)[2].ToString();
        
        Thread.Sleep(800);   
    }

    //Добавляем нужные значения в табличку
    lock(SyncObjects.TableSyncer){
        project.Tables["Site_report"].AddRow(project.Variables["target_domain"].Value+"\t"+project.Variables["keyphrase"].Value+"\t"+
        project.Variables["region"].Value+"\t"+project.Variables["dom_zone"].Value+"\t"+project.Variables["competitor"].Value+"\t"+project.Variables["wordstat_frequency"].Value);
        project.SendInfoToLog("Записываем частотность в табличку в + к имеющимся данным - " + project.Variables["wordstat_frequency"].Value, true);
        project.SendInfoToLog("Пишем строку " + (k++), true);
    }
}
 
Ошибки вызывают именно блоки с регулярками
 
Ничего не может найти по этому регулярному выражению.
Оберни в
Код:
Развернуть Свернуть Копировать
try
{
}catch{}
 
Ничего не может найти по этому регулярному выражению.
Оберни в
Код:
Развернуть Свернуть Копировать
try
{
}catch{}
Спасибо. Это хорошо))
Те вся суть, в том что по данной регуляке ничего не находит, поэтому ошибка?
 
Скорее всего, может быть неправильный индекс совпадения.
 
С регуляркой всегда так. если она ничего не находит то генерирует исключение. я регулярки всегда в try {}catch{} оборачиваю.
в catch{} еще вставляю присваивание нужных мне параметров
 
С регуляркой всегда так. если она ничего не находит то генерирует исключение. я регулярки всегда в try {}catch{} оборачиваю.
в catch{} еще вставляю присваивание нужных мне параметров
Спасибо) да, слышал про этот способ. Какие параметры присваиваете обычно?
 

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