Простота решения задач в Xedant Human Emulator на примере регистрации аккаунтов www.xanga.com

Как пример приведу свою первую задачу и свой первый скрипт. Сразу оговорюсь, я не программист и с PHP знаком на уровне “пару раз редактировал страницы”. Задача у меня возникла следующая: написать регистратор аккаунтов на www.xanga.com. Ну что ж, надо так надо :) Создаем в программе новый скрипт, получаем сразу заготовку:

<?php
// The following code is required to properly run Xedant.com Human Emulator
require("../Templates/xedant_human_emulator.php");

// navigate to google
$browser->navigate("http://www.google.com");
// wait on browser
$browser->wait(1);

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

В строке $browser->navigate("http://www.google.com"); - меняем URL на интересующий нас, ну и комментарий можно поменять, конечно:

<?php // The following code is required to properly run Xedant.com Human Emulator
require("../Templates/xedant_human_emulator.php");

// navigate to selected site
$browser->navigate("http://www.xanga.com/register.aspx");
// wait on browser
$browser->wait(1);

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

Для ожидания загрузки браузером страницы, для корректной отработки скрипта, пользуйтесь функцией $browser->wait(1);.

Для регистрации в каталоге, нам понадобится генератор логинов и паролей, потому я включил заранее припасенный в скрипт и задал генерацию переменных логин, пароль и e-mail (В xanga.com не требуется настоящий ящик, потому сгенерируем фэйковый):

include("gen_login_pass.php");

$lgn=generate_login(8);
$pwd=generate_password(10);
$email=generate_login(9);

Пора переходить к заполнению полей в форме регистрации. Для определения нужных полей я воспользовался функцией нумерации элементов на странице в Human Emulator. Она расположена в меню Debug->Numerated. В подменю список элементов к нумерации, мне же нужны в данный момент только Input Element (сочетание горячих клавиш CTRL+ALT+I). В Input элементах страницы появляются нумерация и название каждого элемента, а так же в нижнем окне “Debug” программы Human Emulator появляется список команд для работы с найденными Input элементами на странице. Таким образом я получил следующую часть кода:

// fill all requred fields 
$input->set_value_by_number(0,$lgn);
$input->set_value_by_number(1,$pwd);
$input->set_value_by_number(2,$pwd);
$input->set_value_by_number(3,"$email@host.com");

Следующим пунктом мне понадобилось распознание капчи. Для определения капчи на странице я так же воспользовался функцией нумерации элементов на странице, только на этот раз Debug->Numerated->Image Element (сочетание горячих клавиш CTRL+ALT+P). При наведении на графические элементы страницы отображается номер элемента на странице. Для распознания капчи я воспользовался следующей командой:

$captcha =$image->recognize_captcha(1,"login","password");

где “1” – это номер капчи на странице, а login и password – это логин и пароль для доступа к нашему сервису распознания капчи :) Распознанную капчу вставляем в Input Element с номером 4 на странице:

$input->set_value_by_number(4,$captcha);

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

// set month - may
$listbox->select_num_value_by_number(0,rand (1,12));
// set day -1
$listbox->select_num_value_by_number(1,rand (1,28));
// set year as 1980
$listbox->select_num_value_by_number(2,rand (40,55));

А так же сделал установку галочки согласия с правилами следующей командой:

// set i agrre check as true
$checkbox->set_checked_by_number(0,"true");

где “0” – это номер элемента “checkbox” на странице (он единственный на странице, потому сложностей с поиском номера не возникло :) )

Теперь мне необходимо сохранить логин и пароль в файл в виде login;password. Для этого в скрипте gen_login_pass.php я добавил функцию, найденную мной в Интернете:

function add_file($path,$page_body)
{
   
$file=fopen($path,"a+");
     
fputs($file,$page_body);
   
   
// close out file
   
fclose($file);
}

А в скрипте регистрации Xanga строку:

// save login and password to file
add_file(“C:test.txt”,$lgn.";".$pwd."\n")

Осталось нажать кнопку “Create Account!”. Для этого воспользовался все той же функцией Human Emulator – нумерация элементов на странице. На этот раз понадобилась функция Debug->Numerated->Button Element (сочетание горячих клавиш CTRL+ALT+B).

// click on button
$button->click_by_number(0);
$browser->wait_for(10,1);

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

// Random selecting theme
$image->click_by_number(rand (1,6));
$browser->wait_for(10,1);

Если интересует какая-либо конкретная тема, просто нужно заменить rand (1,6) на номер этой темы, например $image->click_by_number(3); Осталось только подтвердить выбор нажатием кнопки:

// click on button
$button->click_by_number(0);
$browser->wait_for(10,1);

Из заготовки осталось окончание скрипта:

// This code is required to correctly display messages in "Debug" tab
$app->quit();
?>

Вот собственно и все, мой первый самостоятельный скрипт готов. На его написание у меня ушло минут 40, т.к. я далек от программирования, но главное – результат :)

Скрипт:

<?php // The following code is required to properly run Xedant.com Human Emulator
require("../../Templates/xedant_human_emulator.php");

// navigate to selected site
$browser->navigate("http://www.xanga.com/register.aspx");
$browser->wait(1);

include(
"gen_login_pass.php");

$lgn=generate_login(8);
$pwd=generate_password(10);
$email=generate_login(9);

// fill all requred fields 
$input->set_value_by_number(0,$lgn);
$input->set_value_by_number(1,$pwd);
$input->set_value_by_number(2,$pwd);
$input->set_value_by_number(3,"$email@host.com");

$captcha =$image->recognize_captcha(1,"login","password");
$input->set_value_by_number(4,$captcha);

// set month - may
$listbox->select_num_value_by_number(0,rand (1,12));
// set day -1
$listbox->select_num_value_by_number(1,rand (1,28));
// set year as 1980
$listbox->select_num_value_by_number(2,rand (40,55));

// set i agrre check as true
$checkbox->set_checked_by_number(0,"true");

// save login and password to file
add_file(“C:test.txt”,$lgn.";".$pwd."\n")

// click on button
$button->click_by_number(0);
$browser->wait_for(10,1);

//Second Page

// Random selecting theme
$image->click_by_number(rand (1,6));
$browser->wait_for(10,1);

// click on button
$button->click_by_number(0);
$browser->wait_for(10,1);

// This code is required to correctly display messages in "Debug" tab
$app->quit();
?>

Видео работы скрипта (Просматривается в Internet Explorer)

Автор: Алексей Лагерь