X-Scripts

Power by humanemulator

НАШИ КОНТАКТЫ:
ICQ My ICQ 625657402: 625657402
Наш скайп: igor_sev2
Email : order@x-scripts.com

Сообщество программистов и манимейкеров


Human Emulator Free!
Бесплатная версия программы Human Emulator!
Скачать программу можно тут!

Скрипт регистратор мыла на примере mail.ru. Часть 2.

Итак, из предыдущей статьи у нас есть следующий скрипт, который регистрирует один аккаунт за один запуск скрипта:


$xhe_host ="127.0.0.1:7010";

// The following code is required to properly run XWeb Human Emulator
require("../../Templates/xweb_human_emulator.php");

$browser->navigate("http://mail.ru/");
$browser->wait_for(60,1);

// перейти на страницу регистрации
$anchor->click_by_inner_text("Регистрация в почте ",true);
$browser->wait_for();

// рандомно выставлять пол аккаунта
$gnd=rand(1,2);

switch($gnd)
{
 case 1:
    $gender = "man";
  break;
case 2:
    $gender = "woman";
  break;
}
// задать имя 
$input->set_value_by_number(0,$submitter->generate_random_name("RU",$gender));
// задать фамилию
$input->set_value_by_number(1,$submitter->generate_random_second_name("RU",$gender));
// день
$listbox->select_random_value_by_number(0);
// месяц
$listbox->select_random_value_by_number(1);
// год
$listbox->select_random_value_by_number(2);

// выберем пол
$radiobox->set_checked_by_value($gnd,true);

//  логин для почты
$mail_login = $submitter->generate_random_nick_name(rand(5,9)).rand(100,10000);
// установим сгенерённый логин в поле
$input->set_value_by_number(3,$mail_login);

// сгенерить пароль для мыла
$pwd = $submitter->generate_random_text(rand(7,11),1);
// пароль 
$input->set_value_by_number(4,$pwd);
// подтверждение пароля
$input->set_value_by_number(5,$pwd);
// перейти на заполнение полей без телефона
$anchor->click_by_inner_text("У меня нет мобильного телефона",true);
$browser->wait_for();
// выберем случайный вопрос
$listbox->select_random_value_by_number(5);
// заполним поле ответа
$ans= $submitter->generate_random_text(rand(5,9),1);
$input->set_value_by_number(8,$ans);
// зарегистрировать
$button->click_by_number(1);
$browser->wait_for();

sleep(1);

// распознать каптчу тройную каптчу
$cap = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=1",false);
$cap1 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=2",false);
$cap2 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=3",false);

sleep(1);

// задать каптчу
$input->set_value_by_name_by_form_number("code",$cap.$cap1.$cap2,11);

sleep(1);

// закончить с каптчей
$button->click_by_number(20);
$browser->wait_for();

// Quit
$app->quit(); 

Наша задача добавить в скрипт работу с прокси, различные проверки на удачную регистрацию и запись удачных логинов и паролей в файл.

Начнём с прокси. Допустим у нас есть какой то файл с прокси proxy.txt, который лежит в той же папке что и скрипт. Формат файла следующий:


175.145.221.223:3128
202.53.255.68:3128
196.214.70.60:80
180.242.62.150:8088
95.159.29.116:80
186.193.99.222:3128

Добавим в скрипт код для получения данных из файла с проксями в массив $proxies= file("proxy.txt"); и сразу же создадим цикл, который будет основан на количестве проксей - то есть мы будем регистрировать столько же аккаунтов сколько у нас рабочих проксей в файле, для этого добавим следующий код:

// цикл пройтись по всем прокси в массиве 
for($i=0;$i<count($proxies);$i++) 
{ 
   // получить прокси из массива 
   $proxy =  $proxies[$i]; 
   // задать прокси браузеру 
   $browser->enable_proxy("all connections",$proxy);  

   // тут будет наш скрипт  
} 

Примечание: как работать с файлами в XHE описано в статье работа с файлами. Как организовывать циклы описано в статье работа с циклами

В итоге наш скрипт будет выглядеть теперь так:


$xhe_host ="127.0.0.1:7010";

// The following code is required to properly run XWeb Human Emulator
require("../../Templates/xweb_human_emulator.php");

// получаем прокси из файла в массив
$proxies= file("proxy.txt");

// организовываем цикл на основе массива с проксями
for($i=0;$i<count($proxies);$i++) 
{ 
   // получить прокси из массива 
   $proxy =  $proxies[$i]; 
   // задать прокси браузеру 
   $browser->enable_proxy("all connections",$proxy);  

   $browser->navigate("http://mail.ru/");
   $browser->wait_for(60,1);

   // перейти на страницу регистрации
   $anchor->click_by_inner_text("Регистрация в почте ",true);
   $browser->wait_for();

   // рандомно выставлять пол аккаунта
   $gnd=rand(1,2);

   switch($gnd)
   {
    case 1:
      $gender = "man";
    break;
    case 2:
      $gender = "woman";
    break;
   }
   
   // задать имя 
   $input->set_value_by_number(0,$submitter->generate_random_name("RU",$gender));
   // задать фамилию
   $input->set_value_by_number(1,$submitter->generate_random_second_name("RU",$gender));
   // день
   $listbox->select_random_value_by_number(0);
   // месяц
   $listbox->select_random_value_by_number(1);
   // год
   $listbox->select_random_value_by_number(2);

   // выберем пол
   $radiobox->set_checked_by_value($gnd,true);

   //  логин для почты
   $mail_login = $submitter->generate_random_nick_name(rand(5,9)).rand(100,10000);
   // установим сгенерённый логин в поле
   $input->set_value_by_number(3,$mail_login);

   // сгенерить пароль для мыла
   $pwd = $submitter->generate_random_text(rand(7,11),1);
   // пароль 
   $input->set_value_by_number(4,$pwd);
   // подтверждение пароля
   $input->set_value_by_number(5,$pwd);
   // перейти на заполнение полей без телефона
   $anchor->click_by_inner_text("У меня нет мобильного телефона",true);
   $browser->wait_for();
   // выберем случайный вопрос
   $listbox->select_random_value_by_number(5);
   // заполним поле ответа
   $ans= $submitter->generate_random_text(rand(5,9),1);
   $input->set_value_by_number(8,$ans);
   // зарегистрировать
   $button->click_by_number(1);
   $browser->wait_for();

   sleep(1);

   // распознать каптчу тройную каптчу 
   $cap = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=1",false);
   $cap1 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=2",false);
   $cap2 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=3",false);

   sleep(1);

   // задать каптчу
   $input->set_value_by_name_by_form_number("code",$cap.$cap1.$cap2,11);

   sleep(1);

   // закончить с каптчей
   $button->click_by_number(20);
   $browser->wait_for();
}

// Quit
$app->quit();

Теперь добавим проверку и запись удачно зарегистрированного аккаунта в файл. Для записи в файл будем использовать функцию объекта для работы c текстовыми файлами $textfile->add_string_to_file. Код в скрипте будет $textfile->add_string_to_file($res_file,"$mail_login;$pwd\n");, где $res_file переменная, которая настраивается в начале скрипта $res_file = "mail_accs.txt";, а "$mail_login;$pwd\n" это записываемая строка с данными в файл.

Теперь нужно добавить проверку удачной регистрации нового аккаунта. Сразу после удачной регистрации открывается ящик и в верхнем правом углу отображается аккаунт под которым мы зашли. Вот на наличие его на странице мы и будем проверять. Если такая строка есть значит зашли в аккаунт, а значит мы его зарегистрировали. Простой нализ страницы показал, что это span элемент и к тому же с id <SPAN id=portal-menu__user-email>rekib2855@mail.ru</SPAN>. Это нам даёт возможность использовать функцию объекта $element->get_element_innerText_by_id следующим образом:

$acc=$element->get_element_innerText_by_id("portal-menu__user-email");
Теперь осталась добавить проверку через оператор if. в Результате мы получили:

// получаем акк под которым зашли в почту
$acc=$element->get_element_innerText_by_id("portal-menu__user-email");
// проверяем на соответсвие
if($acc==$mail_login."@mail.ru")
{
    // запись в файл удачно зарегистрированного аккаунта
    $textfile->add_string_to_file($res_file,"$mail_login@mail.ru;$pwd\n",60);
}
else
{
    echo "не удачная регистрация 
"; }

Примечание: команда echo служит для вывода информации в панель отладки.

Теперь наш скрипт выглядит следующим образом:


$xhe_host ="127.0.0.1:7010";

// The following code is required to properly run XWeb Human Emulator
require("../../Templates/xweb_human_emulator.php");

// получаем прокси из файла в массив
$proxies= file("proxy.txt");
// путь к файлу с аккаунтами
$res_file = "mail_accs.txt";
// организовываем цикл на основе массива с проксями
for($i=0;$i<count($proxies);$i++) 
{ 
   // получить прокси из массива 
   $proxy =  $proxies[$i]; 
   // задать прокси браузеру 
   $browser->enable_proxy("all connections",$proxy);  

   $browser->navigate("http://mail.ru/");
   $browser->wait_for(60,1);

   // перейти на страницу регистрации
   $anchor->click_by_inner_text("Регистрация в почте ",true);
   $browser->wait_for();

   // рандомно выставлять пол аккаунта
   $gnd=rand(1,2);

   switch($gnd)
   {
    case 1:
      $gender = "man";
    break;
    case 2:
      $gender = "woman";
    break;
   }
   
   // задать имя 
   $input->set_value_by_number(0,$submitter->generate_random_name("RU",$gender));
   // задать фамилию
   $input->set_value_by_number(1,$submitter->generate_random_second_name("RU",$gender));
   // день
   $listbox->select_random_value_by_number(0);
   // месяц
   $listbox->select_random_value_by_number(1);
   // год
   $listbox->select_random_value_by_number(2);

   // выберем пол
   $radiobox->set_checked_by_value($gnd,true);

   //  логин для почты
   $mail_login = $submitter->generate_random_nick_name(rand(5,9)).rand(100,10000);
   // установим сгенерённый логин в поле
   $input->set_value_by_number(3,$mail_login);

   // сгенерить пароль для мыла
   $pwd = $submitter->generate_random_text(rand(7,11),1);
   // пароль 
   $input->set_value_by_number(4,$pwd);
   // подтверждение пароля
   $input->set_value_by_number(5,$pwd);
   // перейти на заполнение полей без телефона
   $anchor->click_by_inner_text("У меня нет мобильного телефона",true);
   $browser->wait_for();
   // выберем случайный вопрос
   $listbox->select_random_value_by_number(5);
   // заполним поле ответа
   $ans= $submitter->generate_random_text(rand(5,9),1);
   $input->set_value_by_number(8,$ans);
   // зарегистрировать
   $button->click_by_number(1);
   $browser->wait_for();

   sleep(3);

   // распознать каптчу тройную каптчу 
   $cap = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=1",false);
   $cap1 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=2",false);
   $cap2 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=3",false);

   sleep(1);

   // задать каптчу
   $input->set_value_by_name_by_form_number("code",$cap.$cap1.$cap2,11);

   // закончить с каптчей
   $button->click_by_number(20);
   $browser->wait_for();
   
   sleep(3);

   // получаем акк под которым зашли в почту
   $acc=$element->get_element_innerText_by_id("portal-menu__user-email");
   // проверяем на соответсвие
   if($acc==$mail_login."@mail.ru")
   {
       // запись в файл удачно зарегистрированного аккаунта
       $textfile->add_string_to_file($res_file,"$mail_login@mail.ru;$pwd\n",60);
   }
   else
   {
      echo "не удачная регистрация 
"; } } // Quit $app->quit();

Если запустить этот скрипт то у нас возникнут проблемы при регистрации второго и последующих аккаунтов так как прежде чем регистрировать новый аккаунт желательно выйти из последнего зареганного аккаунта. К тому же нам нужно ещё менять данные браузера, чистить кэш и менять user-agent строку, можно менять размер браузера и т.д..

Как показала практика работы с хуманом наилучший результат по анонимности и работы с памятью достигается при использовании закладок браузера и последующем их закрытии. Для этого в начало цикла добавим следующий код:

// задаём количество браузеров
$browser->set_count(2);
// делаем активный следующим
$browser->set_active_browser(1,true);

Так же до цикла делаем переход основного браузера на пустую страницу: $browser->navigate('about:blank');

В конце цикла добавим следующий код, который будет чистить данные браузера, а потом закрывать открытый в начале скрипта браузер:

  // чистим данные браузера
  $browser->clear_cache();
  $browser->clear_history();
  $browser->clear_cookies("",false);

  // сделаем активным главный браузер
  $browser->set_active_browser(0,true);
  // закрыть все браузеры
  $browser->close_all_tabs();

В итоге наш скрипт стал:


$xhe_host ="127.0.0.1:7010";

// The following code is required to properly run XWeb Human Emulator
require("../../Templates/xweb_human_emulator.php");

// получаем прокси из файла в массив
$proxies= file("proxy.txt");
// путь к файлу с аккаунтами
$res_file = "mail_accs.txt";

// перейдём на пустую страницу
$browser->navigate("about:blank");
$browser->wait_for(60,1);

// организовываем цикл на основе массива с проксями
for($i=0;$i<count($proxies);$i++) 
{ 

   // задаём количество браузеров
   $browser->set_count(2);
   // делаем активный следующим
   $browser->set_active_browser(1,true);

   // получить прокси из массива 
   $proxy =  $proxies[$i]; 
   // задать прокси браузеру 
   $browser->enable_proxy("all connections",$proxy);  

   $browser->navigate("http://mail.ru/");
   $browser->wait_for(60,1);

   // перейти на страницу регистрации
   $anchor->click_by_inner_text("Регистрация в почте ",true);
   $browser->wait_for();

   // рандомно выставлять пол аккаунта
   $gnd=rand(1,2);

   switch($gnd)
   {
    case 1:
      $gender = "man";
    break;
    case 2:
      $gender = "woman";
    break;
   }
   
   // задать имя 
   $input->set_value_by_number(0,$submitter->generate_random_name("RU",$gender));
   // задать фамилию
   $input->set_value_by_number(1,$submitter->generate_random_second_name("RU",$gender));
   // день
   $listbox->select_random_value_by_number(0);
   // месяц
   $listbox->select_random_value_by_number(1);
   // год
   $listbox->select_random_value_by_number(2);

   // выберем пол
   $radiobox->set_checked_by_value($gnd,true);

   //  логин для почты
   $mail_login = $submitter->generate_random_nick_name(rand(5,9)).rand(100,10000);
   // установим сгенерённый логин в поле
   $input->set_value_by_number(3,$mail_login);

   // сгенерить пароль для мыла
   $pwd = $submitter->generate_random_text(rand(7,11),1);
   // пароль 
   $input->set_value_by_number(4,$pwd);
   // подтверждение пароля
   $input->set_value_by_number(5,$pwd);
   // перейти на заполнение полей без телефона
   $anchor->click_by_inner_text("У меня нет мобильного телефона",true);
   $browser->wait_for();
   // выберем случайный вопрос
   $listbox->select_random_value_by_number(5);
   // заполним поле ответа
   $ans= $submitter->generate_random_text(rand(5,9),1);
   $input->set_value_by_number(8,$ans);
   // зарегистрировать
   $button->click_by_number(1);
   $browser->wait_for();

   sleep(3);

   // распознать каптчу тройную каптчу 
   $cap = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=1",false);
   $cap1 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=2",false);
   $cap2 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=3",false);

   sleep(1);

   // задать каптчу
   $input->set_value_by_name_by_form_number("code",$cap.$cap1.$cap2,11);

   // закончить с каптчей
   $button->click_by_number(20);
   $browser->wait_for();
   
   sleep(3);

   // получаем акк под которым зашли в почту
   $acc=$element->get_element_innerText_by_id("portal-menu__user-email");
   // проверяем на соответсвие
   if($acc==$mail_login."@mail.ru")
   {
       // запись в файл удачно зарегистрированного аккаунта
       $textfile->add_string_to_file($res_file,"$mail_login@mail.ru;$pwd\n",60);
   }
   else
   {
      echo "не удачная регистрация 
"; } // чистим данные браузера $browser->clear_cache(); $browser->clear_history(); $browser->clear_cookies("",false); // сделаем активным главный браузер $browser->set_active_browser(0,true); // закрыть все браузеры $browser->close_all_tabs(); } // Quit $app->quit();

Теперь добавим работу с user-agent строкой. Для этого у нас есть файл user-agents.txt, который содержит данные в следующем формате:


Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 1.1.4322)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; (R1 1.5); .NET CLR 1.1.4322)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; InfoPath.2; Windows-Media-Player/10.00.00.3990)

По аналогии с прокси получим данные из файла в массив добавим в начало скрипта следующий код: $useragents = file("useragent.txt"); Задавать эти строки мы будем случайным образом сразу после того как делаем активным 1 браузер, используя следующий код: $browser->set_user_agent($useragents[rand(0,count($useragents)-1)]);, где ($useragents[rand(0,count($useragents)-1)] это случайный элемент массива от 0 до количества элементов в массиве-1.

В конце скрипта перед $app->quit(); добавим код отключения прокси: $browser->disable_proxy("all connections");

Теперь наш скрипт имеет вид:


$xhe_host ="127.0.0.1:7010";

// The following code is required to properly run XWeb Human Emulator
require("../../Templates/xweb_human_emulator.php");

// получаем прокси из файла в массив
$proxies= file("proxy.txt");
// строки юзер агент
$useragents = file("useragent.txt");
// путь к файлу с аккаунтами
$res_file = "mail_accs.txt";

// перейдём на пустую страницу
$browser->navigate("about:blank");
$browser->wait_for(60,1);

// организовываем цикл на основе массива с проксями
for($i=0;$i<count($proxies);$i++) 
{ 

   // задаём количество браузеров
   $browser->set_count(2);
   // делаем активный следующим
   $browser->set_active_browser(1,true);
   // задать user-agent строку
   $browser->set_user_agent($useragents[rand(0,count($useragents)-1)]);
   
   // получить прокси из массива 
   $proxy =  $proxies[$i]; 
   // задать прокси браузеру 
   $browser->enable_proxy("all connections",$proxy);  

   $browser->navigate("http://mail.ru/");
   $browser->wait_for(60,1);

   // перейти на страницу регистрации
   $anchor->click_by_inner_text("Регистрация в почте ",true);
   $browser->wait_for();

   // рандомно выставлять пол аккаунта
   $gnd=rand(1,2);

   switch($gnd)
   {
    case 1:
      $gender = "man";
    break;
    case 2:
      $gender = "woman";
    break;
   }
   
   // задать имя 
   $input->set_value_by_number(0,$submitter->generate_random_name("RU",$gender));
   // задать фамилию
   $input->set_value_by_number(1,$submitter->generate_random_second_name("RU",$gender));
   // день
   $listbox->select_random_value_by_number(0);
   // месяц
   $listbox->select_random_value_by_number(1);
   // год
   $listbox->select_random_value_by_number(2);

   // выберем пол
   $radiobox->set_checked_by_value($gnd,true);

   //  логин для почты
   $mail_login = $submitter->generate_random_nick_name(rand(5,9)).rand(100,10000);
   // установим сгенерённый логин в поле
   $input->set_value_by_number(3,$mail_login);

   // сгенерить пароль для мыла
   $pwd = $submitter->generate_random_text(rand(7,11),1);
   // пароль 
   $input->set_value_by_number(4,$pwd);
   // подтверждение пароля
   $input->set_value_by_number(5,$pwd);
   // перейти на заполнение полей без телефона
   $anchor->click_by_inner_text("У меня нет мобильного телефона",true);
   $browser->wait_for();
   // выберем случайный вопрос
   $listbox->select_random_value_by_number(5);
   // заполним поле ответа
   $ans= $submitter->generate_random_text(rand(5,9),1);
   $input->set_value_by_number(8,$ans);
   // зарегистрировать
   $button->click_by_number(1);
   $browser->wait_for();

   sleep(3);

   // распознать каптчу тройную каптчу 
   $cap = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=1",false);
   $cap1 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=2",false);
   $cap2 = $app->dlg_captcha_from_url_exactly("http://e.mail.ru/cgi-bin/x_image?num=3",false);

   sleep(1);

   // задать каптчу
   $input->set_value_by_name_by_form_number("code",$cap.$cap1.$cap2,11);

   // закончить с каптчей
   $button->click_by_number(20);
   $browser->wait_for();
   
   sleep(3);

   // получаем акк под которым зашли в почту
   $acc=$element->get_element_innerText_by_id("portal-menu__user-email");
   // проверяем на соответсвие
   if($acc==$mail_login."@mail.ru")
   {
       // запись в файл удачно зарегистрированного аккаунта
       $textfile->add_string_to_file($res_file,"$mail_login@mail.ru;$pwd\n",60);
   }
   else
   {
      echo "не удачная регистрация 
"; } // чистим данные браузера $browser->clear_cache(); $browser->clear_history(); $browser->clear_cookies("",false); // сделаем активным главный браузер $browser->set_active_browser(0,true); // закрыть все браузеры $browser->close_all_tabs(); } // отключение прокси $browser->disable_proxy("all connections"); // Quit $app->quit();

Производительность скрипта очень сильно зависит от скорости и качества используемых прокси.

Скрипт написан 18.01.2012 в Human Emulator 4.2 Advanced. На момент публикации статьи 23.01.2012 скрипт был рабочий.

скачать скрипт
Количество скачиваний: 2362

<< Другие скрипты