Как пример приведу свою первую задачу и свой первый скрипт. Сразу оговорюсь, я не программист и с 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)
Автор: Алексей Лагерь