Home > Articles > Простота решения задач в XWeb Human Emulator

Простота решения задач в XWeb Human Emulator

January 26th, 2009

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

 
<?php 
// The following code is required to properly 
// run XWeb Human Emulator 
require("../Templates/xweb_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/xweb_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));

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

 $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 XWeb Human Emulator 
require("../../Templates/xweb_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)

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

Alexey Lager Articles

  1. No comments yet.
  1. No trackbacks yet.