Пожалуй, самое распространённое требование при регистрации каких либо аккаунтов на сайтах это рабочий e-mail. На примере mail.ru напишем скрипт, который будет регать для нас email-ы, которые мы потом сможем использовать в других регистрациях.
Итак, первое что мы сделаем это создадим новый скрипт через меню Файл->Новый. Заменим в скрипте http://www.google.com на mail.ru. Запустим скрипт на выполнение и перейдём на сайт mail.ru. После находим на странице ссылку с текстом «Регистрация в почте», кликаем на ней правой кнопкой мыши и выбираем пункт меню $anchor в развернувшемся подменю кликаем на пункт меню $anchor->click_by_inner_text(‘Регистрация в почте ‘,true);. Нужная нам функция добавилась в скрипт и теперь наш скрипт выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$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 и затем выбираем нужные нам функции из правого поля.
Теперь наш скрипт выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$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’,»);». На практике лучше использовать функции, которые работают с элементом по его имени, так как при добавлении нового элемента такого же типа нумерация полей меняется и это может привести к неработоспособности скрипта, тогда как имя элемента остаётся постоянным. НО в данном случае, судя по именам элементов они скорее всего меняются чаще, чем добавляются новые поля на страницу, поэтому будет надёжнее работать по номерам элементов.
Теперь вставим генерацию имени и фамилии в поля с нужными для нас параметрами. Скрипт будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$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» говорят о том что нужно генерить только русские мужские имена и фамилии. Допустим что стоит задача случайным образом создавать в том числе и женские имена и фамилии. Тогда добавим следующий код в скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 |
// рандомно выставлять пол аккаунта $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; } |
После добавления этого кода скрипт будет выглядеть следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
$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.
Таким образом получим следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
$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);, но тогда наш код выбора пола имел бы такой вот вид:
1 2 3 4 5 6 7 8 9 10 11 12 |
// рандомно выставлять пол аккаунта $gnd=rand(0,1); switch($gnd) { case 0: $gender = "man"; break; case 1: $gender = "woman"; break; } |
В итоге имеем скрипт в следующем виде:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
$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 и перепишем код следующим образом:
1 2 3 4 |
// создадим логин $mail_login = $submitter->generate_random_nick_name(rand(5,9)).rand(100,10000); // установим сгенерённый логин в поле $input->set_value_by_number("3",$mail_login); |
Примечание: Не ленитесь расставлять комментарии это поможет вам понять как работает скрипт, в том случае если вы его решите переделать через месяц другой.
После всех манипуляций получим:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
$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. В итоге для пароля добавим такой вот код:
1 2 3 4 5 6 |
// сгенерить пароль для мыла $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);
Теперь наш скрипт будет выглядеть так вот:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
$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:
1 2 3 |
$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 следующим образом:
1 2 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); |
То есть в результате работы этого кода мы получаем, что вся каптча распределена в трёх частях. Заполним поле каптчей используя следующий код:
$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.
Теперь наш скрипт будет выглядеть следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
$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(кол-во секунд);, которая останавливает работу скрипта на заданное количество секунд.
Теперь закончим регистрацию используя контекстное меню, как это мы делали выше. В итоге наш скрипт стал вот таким вот:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
$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. На момент публикации статьи скрипт был рабочий