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

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

<?php

$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"); и сразу же создадим цикл, который будет основан на количестве проксей - то есть мы будем регистрировать столько же аккаунтов сколько у нас рабочих проксей в файле, для этого добавим следующий код:

<?php
// цикл пройтись по всем прокси в массиве 
for($i=0;$i<count($proxies);$i++) 

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

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

?>

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

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

<?php

$xhe_host 
="127.0.0.1:7010";

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

// получаем прокси из файла в массив
$proxiesfile("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 rekib2855@mail.ru. Это нам даёт возможность использовать функцию объекта $element->get_element_innerText_by_id следующим образом: $acc=$element->get_element_innerText_by_id("portal-menu__user-email");. теперь осталась добавить проверку через оператор if. в Результате мы получили:

<?php
// получаем акк под которым зашли в почту
$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 
"не удачная регистрация <br>";
}
?>

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

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

<?php

$xhe_host 
="127.0.0.1:7010";

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

// получаем прокси из файла в массив
$proxiesfile("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 
"не удачная регистрация <br>";
   }

}

// Quit
$app->quit();
?>

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

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

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

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

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

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

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

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

<?php

$xhe_host 
="127.0.0.1:7010";

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

// получаем прокси из файла в массив
$proxiesfile("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 
"не удачная регистрация <br>";
   }
  
  
// чистим данные браузера
  
$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");

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

<?php

$xhe_host 
="127.0.0.1:7010";

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

// получаем прокси из файла в массив
$proxiesfile("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 
"не удачная регистрация <br>";
   }

  
// чистим данные браузера
  
$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 в XHE 4.2 MT. На момент публикации статьи 23.01.2012 скрипт был рабочий.

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

Наши контакты

Выполняем разработку скриптов под XHE на заказ.

Конфиденциальность и не использование скриптов в своих целях гарантируем!

ICQ : 625657402

Email : order@x-scripts.com

ICQ часто теряет сообщения. Если Вам не ответили, пожалуйста, пишите нам на e-mail.

Последние скрипты

Советы специалистов

У нас большой опыт написания скриптов и разработки Веб-инструментов, которым мы готовы поделиться с вами. Пишите ваши комментарии!

Последние статьи