X-Scripts

Power by humanemulator

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

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


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

Пожалуй, самое распространённое требование при регистрации каких либо аккаунтов на сайтах это рабочий e-mail. На примере mail.ru напишем скрипт, который будет регать для нас email-ы, которые мы потом сможем использовать в других регистрациях.

Итак, первое что мы сделаем это создадим новый скрипт через меню Файл->Новый. Заменим в скрипте http://www.google.com на mail.ru. Запустим скрипт на выполнение и перейдём на сайт mail.ru. После находим на странице ссылку с текстом "Регистрация в почте", кликаем на ней правой кнопокой мыши и выбираем пункт меню $anchor в развернувшемся подменю кликаем на пункт меню $anchor->click_by_inner_text('Регистрация в почте ',true);. Нужная нам функция добавилась в скрипт и теперь наш скрипт выглядит следующим образом:


$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();

// Quit
$app->quit();

Примечание: После любых функций клика, которые делают переход на другую страницу или выполняют какие либо действия после которых браузер обновляется, нужно добавлять функцию $browser->wait_for();. Эта функция ожидает пока браузер выполнит необходимые действия, не давая скрипту идти дальше.

Запускаем скрипт на выполнение и переходим на страницу регистрации mail.ru. Перед нами страница с полями, которые нужно заполнить данными. Первые два поля это Имя и Фамилия. Для генерации данных в XHE используется объект submitter. У этого объекта есть функции для генерации имени и фамилии - generate_random_name и generate_random_second_name, соответственно. Вставляем эти функции в скрипт через диалог добавления кода. Этот диалог можно вызвать горячими клавишами Ctrl+Alt+Right(стрелка вправо). В диалоге выбираем объект submitter и затем выбираем нужные нам функции из правого поля.

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


$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();

$submitter->generate_random_name($lang="EN",$sex_for_RU="man");
$submitter->generate_random_second_name($lang="EN",$sex_for_RU="man");

// Quit
$app->quit();

Для работы с полями вставки текста в XHE служит объект input. Для вставки значений в поля Имя и Фамилия используем контекстное меню аналогично с тем как мы кликали на ссылку "Регистрация в почте". В открывшемся подменю меню $input выбирем функцию "$input->set_value_by_number('0','');", а для второго поля "$input->set_value_by_number('1','');".

Примечание: Помимо функции работы по номеру поля в контестном меню можно увидеть и функцию работы с полем по имени, типа: "$input->set_value_by_name('x_29f24908ee4918a4','');". На практике лучше использовать функции, которые работают с элементом по его имени, так как при добавлении нового элемента такого же типа нумерация полей меняется и это может привести к неработаспособности скрипта, тогда как имя элемента остаётся постоянным. НО в данном случае, судя по именам элементов они скорее всего меняются чаще, чем добавляются новые поля на страницу, поэтому будет надёжнее работать по номерам элементов.

Теперь вставим генерацию имени и фамилии в поля с нужными для нас параметрами. Скрипт будет выглядеть так:


$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();

$input->set_value_by_number("0",$submitter->generate_random_name("RU","man"));
$input->set_value_by_number("1",$submitter->generate_random_second_name("RU","man"));

// Quit
$app->quit();

Параметры "RU" и "man" говорят о том что нужно генерить только русские мужские имена и фамилии. Допустим что стоит задача случайным образом создавать в том числе и женские имена и фамилии. Тогда добавим следующий код в скрипт:

// рандомно выставлять пол аккаунта
$gnd=rand(1,2); // генерим случайным образом или 1 или 2.

switch($gnd) // оператор выбора 
{
 case 1: // при $gnd=1 переменной $gender будет присваиваться значение "man"
    $gender = "man";
  break;
case 2: // при $gnd=2 переменной $gender будет присваиваться значение "woman"
    $gender = "woman";
  break;
}

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


$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));

// Quit
$app->quit();

Теперь выберем дату рождения. Для работы с элементами выбора в XHE используется объект listbox. Значения даты будем выбирать случайным образом используя функцию select_random_value_by_number.

Таким образом получим следующее:


$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);

// Quit
$app->quit();

Тепер выберем пол. В скрипте уже пол выбран его содержит переменная $gnd. Теперь с помощью неё выберем нужный пол на странице. Для работы с так называемыми радиобоксами в XHE есть элемент radiobox. Используя контекстное меню для элемента выбираем функцию $radiobox->set_checked_by_value('1',true); и меняем '1' на $gnd.

Примечаение: Тут можно было использовать функции работы по номеру $radiobox->set_checked_by_number(0,true);, но тогда наш код выбора пола имеел бы такой вот вид:

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

switch($gnd)
{
 case 0:
    $gender = "man";
  break;
case 1:
    $gender = "woman";
  break;
}

В итоге имеем скрипт в следующем виде:


$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);

// Quit
$app->quit();

Примечание: Переодически можно запускать скрипт что бы проверять всё ли срабатывает так как надо.

Теперь нам нужно сгенерить логин для мыла и вставить его в поле логина. Для этого используем функцию $input->set_value_by_number('3',''); вместе с функцией $submitter->generate_random_nick_name. Для того что бы сделать длину генерируемого пароля случайной используем оператор rand и тогда получем следующий код $input->set_value_by_number('3',$submitter->generate_random_nick_name(rand(5,9));. Этот код будет вставлять случайный логин длиной от 5 до 9 символов. Для того что ещё больше сделать логин уникальным можно добавить опять таки оперетор rand. Тогда вызов функции будет выглядеть так $input->set_value_by_number('3',$submitter->generate_random_nick_name(rand(5,9)).rand(100,10000));

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

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

Примечание: Не ленитесь раставлять комментарии это поможет вам понять как работает скрипт, в том случае если вы его решите переделать через месяц другой.

После всех манипуляций получим:


$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);

// Quit
$app->quit();

По анологии делаем тоже самое с заполнением паролем, только для генерации пароля используем функцию $submitter->generate_random_text. В итоге для пароля добавим такой вот код:

// сгенерить пароль для мыла
$pwd = $submitter->generate_random_text(rand(5,9),1);
// пароль 
$input->set_value_by_number("4",$pwd);
// подтверждение пароля
$input->set_value_by_number("5",$pwd);

Дальше если надо, то добавляем в поле телефон, если делать регистрацию без телефона, то добавим для ссылки "У меня нет мобильного телефона" через конекстное меню вызов функции $anchor->click_by_inner_text('У меня нет мобильного телефона',true);. Затем кликнем на ссылку что бы увидеть поля для заполнения. Выберем случайным образом из списка вопросов вопрос, использя уже известную нам функцию $listbox->select_random_value_by_number(5);. Для формирования ответа можно использовать функцию $submitter->generate_random_text либо задавать один и тот же ответ это по выбору. В нашем случае будем использовать $submitter->generate_random_text.

После заполнения всех нужных полей кликнем на кнопку для завершения регистрации. Для работы с кнопками типа INPUT в XHE используется объект button. Используя контекстное меню для элемента выберем функцию $button->click_by_number(1);

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


$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);
// зададим город
$input->set_value_by_number("2",$submitter->generate_random_city("RU"));
// выберем пол
$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(5,9),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();

// Quit
$app->quit();

После запуска этого скрипта в браузере откроется окно с каптчей. Для работы с распознанием каптчи можно использовать различные сервисы такие как captchabot.com или anti-captcha.com. Можно и другие просто для работы с этими двумя сервисами в XHE есть объекты $captchabot и $anticapcha. А так же можно использовать ручной ввод каптчи через функции объекта $app:

$app->dlg_captcha_from_image_number($number);
$app->dlg_captcha_from_url($url);
$app->dlg_captcha_from_url_exactly($url,$exactly);.

Мы будем использовать функцию $app->dlg_captcha_from_url_exactly($url,$exactly);. Для этого для начала посмотрим src картинки. Src можно посмотреть в исходникам html страницы, либо через Инспектор Элементов в XHE, либо через контекстное меню, добавив в скрипт любую функцию работы картинки через src, например: $image->click_by_src('http://e.mail.ru/cgi-bin/x_image?num=2&x_reg_id=5yJ3cvUd&r=1326713669663',true); Src картинки будет http://e.mail.ru/cgi-bin/x_image?num=2&x_reg_id=5yJ3cvUd&r=1326713669663. Сразу становится ясно, что src постоянно разный и к тому же каптча состоит из трёх картинок, поэтому быдем вызывать $app->dlg_captcha_from_url_exactly следующим образом:

$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);

То есть в результате работы этого кода мы получаем, что вся каптча распределена в трёх частях. Заполним поле каптчей используя следующий код: $input->set_value_by_name_by_form_number("code",$cap.$cap1.$cap2,11); - где cap.$cap1.$cap2 распознанная каптча.

Примечание: Иногда когда поля находятся в формах (тэг form) функции $input->set_value_by_name могут не срабатывать в этом случае следует использовать функцию $input->set_value_by_name_by_form_number.

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


$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);

// Quit
$app->quit();

Примечание: Иногда появляется необходимость задержать скрипт несколько дольше, чем это делает функция $browser->wait_for();. Например когда открываются всплывающие окна в этот момент браузер может освободиться раньше, чем появится всплывающее окно. В этих случаях используется функция sleep(кол-во секунд);, которая останавливает работу скрипта на заданное количество секунд.

Теперь закончим регистрацию используя крнтекстное меню, как этомы делали выше. В итоге наш скрипт стал вот таким вот:


$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();

В следующей статье мы добавим использование прокси, завернём всё это в цикл, а так же добавим проверки на удачную регистрацию и запись удачных регистраций в файл.

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

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

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

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