Шиза с взятием данных

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93
Из таблицы, где 1-й столбец мыла, а 2-й пароли, надо брать и вставлять данные последовательно в поля ввода,
а почему-то не с 1-й строчки мыло берется, а произвольно, с 512-й, 27-й и т.д. Надо, чтобы брались данные с 1-й строки, затем со 2-й и т.д. Подскажите, где ошибка.
C#:
int a = 0; // счетчик под цикл
string LoginMail = string.Empty;
string Pass = string.Empty;
Tab Active = instance.ActiveTab;

var package = new ExcelPackage(new FileInfo(project.Directory+ "/base.xlsx"));
ExcelWorksheet Table = package.Workbook.Worksheets[1];

List<string> MailList = new List<string>();
List<string> PassList = new List<string>();

// цикл ввода email
for (a = 1; a <= Table.Dimension.Rows; a++)
{
    LoginMail = Convert.ToString(Table.GetValue(a, 1));
    if (LoginMail == string.Empty) continue;
    MailList.Add(LoginMail);
}

// цикл ввода пароля
for (a = 1; a <= Table.Dimension.Rows; a++)
{
    Pass = Convert.ToString(Table.GetValue(a, 2));
    if (Pass == string.Empty) continue;
    PassList.Add(Pass);
}

LoginMail = MailList[new Random().Next(0, MailList.Count)];

Active.Navigate("https://site.com//");
Active.WaitDownloading();
//

Active.FindElementByXPath("//input[@id='user_login']", 0).SetValue(LoginMail, "Full");
Thread.Sleep(new Random().Next(1000, 3100));
//
Active.FindElementByXPath("//input[@id='user_pass']", 0).SetValue(Pass, "Full");
Thread.Sleep(new Random().Next(1000, 3000));
 

Manfred

Client
Регистрация
06.08.2019
Сообщения
37
Благодарностей
17
Баллы
8
LoginMail = MailList[new Random().Next(0, MailList.Count)]; ?
 

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93
Я закомментировал этот кусок, все равно берет случайную строку.
 

Manfred

Client
Регистрация
06.08.2019
Сообщения
37
Благодарностей
17
Баллы
8
смотри:

1. это не цикл ввода email - это ты просто в список грузишь почты из листа экселя
// цикл ввода email
for (a = 1; a <= Table.Dimension.Rows; a++)
{
LoginMail = Convert.ToString(Table.GetValue(a, 1));
if (LoginMail == string.Empty) continue;
MailList.Add(LoginMail);
}

2. это не ввод пароля, это просто закидываешь в список паролей из таблички экселя.

// цикл ввода пароля
for (a = 1; a <= Table.Dimension.Rows; a++)
{
Pass = Convert.ToString(Table.GetValue(a, 2));
if (Pass == string.Empty) continue;
PassList.Add(Pass);
}



3.
Active.FindElementByXPath("//input[@id='user_login']", 0).SetValue(LoginMail, "Full");
Здесь ты в инпут вводишь значение переменной LoginMail

В коде который ты ранее привел ее значение присваивалось рандомом, брался случайны элемент из списка MailList.

Если хочешь по порядку должен быть цикл по списку.

Вот это вот:
Active.Navigate("https://site.com//");
Active.WaitDownloading();
//

Active.FindElementByXPath("//input[@id='user_login']", 0).SetValue(LoginMail, "Full");
Thread.Sleep(new Random().Next(1000, 3100));
//
Active.FindElementByXPath("//input[@id='user_pass']", 0).SetValue(Pass, "Full");
Thread.Sleep(new Random().Next(1000, 3000));


Должно быть в цикле. В цикле должны
LoginMail
и Pass получать значения
 
  • Спасибо
Реакции: soprano

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93
А как правильно? Я еще только в начале пути, не совсем въезжаю.
 

Manfred

Client
Регистрация
06.08.2019
Сообщения
37
Благодарностей
17
Баллы
8
Примерно такая логика:
C#:
Tab Active = instance.ActiveTab; // активная вкладка
var package = new ExcelPackage(new FileInfo(project.Directory+ "/data.xlsx"));
    ExcelWorksheet Table = package.Workbook.Worksheets[1];
    
string LoginMail = string.Empty;
string Pass = string.Empty;
string TempStr = string.Empty;
int a = 0; 
int i=0;     
List<string> MailList = new List<string>();
List<string> PassList = new List<string>();  
  
 //почт и паролей должно быть одинаковое количество, значит одного цикла на двоих будет достаточно
    for (a = 1; a <= Table.Dimension.Rows; a++)
    {
        TempStr = Convert.ToString(Table.GetValue(a, 1));
        //project.SendInfoToLog("mail:"+TempStr);
        MailList.Add(TempStr);
                
        TempStr = Convert.ToString(Table.GetValue(a, 2));
        //project.SendInfoToLog("Pass:"+TempStr);
        PassList.Add(TempStr);
    }   

    for (i= 1; i < PassList.Count; i++)
    {
       Pass =PassList[i]    ;
       project.SendInfoToLog("Pass:"+Pass);
       LoginMail= MailList[i];   
       project.SendInfoToLog("mail:"+LoginMail);
        
       Active.Navigate("https://site.com//");
       Active.WaitDownloading();

       Active.FindElementByXPath("//input[@id='user_login']", 0).SetValue(LoginMail, "Full");
       Thread.Sleep(new Random().Next(1000, 3100));

       Active.FindElementByXPath("//input[@id='user_pass']", 0).SetValue(Pass, "Full");
      Thread.Sleep(new Random().Next(1000, 3000));   
        
    }
 
  • Спасибо
Реакции: soprano

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93
Класс, только выдает ошибку "Worksheet position out of range."
 

heks

Client
Регистрация
01.10.2013
Сообщения
1 222
Благодарностей
328
Баллы
83
брутить это плохо)))
 

Manfred

Client
Регистрация
06.08.2019
Сообщения
37
Благодарностей
17
Баллы
8
Класс, только выдает ошибку "Worksheet position out of range."

Проверь заполнение эксельки.
Чтоб логины и пароли были заполнены и их было одинаковое количество.

Пользуйся отладкой. Выводи инфу в лог через
project.SendInfoToLog(
 

soprano

Client
Регистрация
25.08.2011
Сообщения
866
Благодарностей
948
Баллы
93
брутить это плохо)))
Это не брут, это парсинг - входишь на сайт, парсишь токен, который потом используешь для чего-то хорошего (или плохого). А из-за ограничений токена,
приходиться много раз это проделывать с разных мыл.
 

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