X-Scripts

Power by humanemulator

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

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


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

Скрипт регистратор мыла на примере 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. На момент публикации статьи скрипт был рабочий

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

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