Archive for the ‘Human Emulator’ Category
Wednesday, May 5th, 2010 |
Часто встречаются ресурсы где текст вводится в яваскрипт боксе. Т.е. элемента к которому можно обратиться средствами Human Emulator’а как бы нет. Однако если использовать Firebug можно обнаружить, что набираемый текст появляется внутри каких либо тегов.
Т.е. фактически его можно просто туда вставить, делается это слудующим образом:
/* <div id="test1"><div id="test2"></div></div> */
function str_insert($insertstring, $intostring, $offset) {
$part1 = substr($intostring, 0, $offset);
$part2 = substr($intostring, $offset);
$part1 = $part1 . $insertstring;
$whole = $part1 . $part2;
return $whole;
}
$elem = "tst2"
$page = $webpage->get_body();
$pos = strpos($page, $elem);
$page = str_insert("Hello Kitty", $page, $pos + strlen($elem) + 1);
$webpage->set_body ($page);
$browser->wait_for(10,1);
подмена страницы =) Думаю идея понятна.
Posted in Human Emulator | 2 Comments »
Monday, May 3rd, 2010 |
Продолжая монологи про HumanEmulator дам совет о том, как сделать более-менее универсальный шаблон для создания регистраций. Ведь по сути выполняются одни и те же дейсвия : “Зайти сюда, заполнить поля, щелкнуть эту кнопку”. Это естественно касается именно процесса регистрации, далее все равно придется писать код “как положенно”.
$fields = array(
"input:name" => $name,
"input:mail" => $gmail,
"input:conf_mail" => $gmail,
"input:profile_url" => "http://google.com",
"cptch:4" => "recaptcha_response_field", // cptch - image number, value = field name
"checkbox:og_register[1750]" => True,
"textarea:profile_description" => $bio,
"confirm:button" => "op"
);
Это что-то вроде правила для заполнения полей. Далее пишем функцию _register() которая заполняет поля форм согласно правилу. Функция естественно “демо”, её задача дать базовое представление о том, как это всё будет работать.
function _register($fields) {
include("include_all.php");
foreach ($fields as $key=>$value) {
$split = explode(':', $key);
$param_field = $split[0];
$param_name = $split[1];
switch ($param_field) {
case "input" :
$input->set_focus_by_name($param_name);
$input->set_value_by_name($param_name, $value);
break;
case "cptch" :
$captcha = $app->dlg_captcha_from_image_number($param_name);
$input->set_focus_by_name($value);
$input->set_value_by_name($value, $captcha);
break;
case "listbox" :
$list_size = $listbox->get_length_by_name($param_name);
$rnd_elem = rand(1, $list_size - 1);
if ($list_size > 50) {
$rnd_elem = 80;
}
$listbox->select_num_value_by_name($param_name, $rnd_elem);
echo "
\n\n\n";
echo "List name : $param_name List size : $list_size Elem : $rnd_elem \n\n";
break;
case "confirm" :
switch ($param_name) {
case "button" :
$browser->wait(1);
sleep(rand(1,3));
$button->click_by_name($value);
break;
case "btn" :
$browser->wait(1);
sleep(rand(1,3));
$btn->click_by_number($value);
break;
}
break;
case "checkbox" :
$checkbox->click_by_name($param_name);
break;
case "textarea" :
$textarea->set_value_by_name($param_name, $value);
break;
}
}
}
В итоге сам процесс регистрации :
$browser->navigate($url);
$browser->wait(1);
sleep(rand(1,3));
$anchor->click_by_inner_text("Register", true);
$browser->wait(rand(2,6));
_register($fields);
gmail_confirmer($gmail, $pass, 'http://www.site.com/validate/', "site registration");
Используется функция gmail_confirmer о которой можно прочитать в предыдущей статье посвещянной использованию HumanEmulator’а. Весь код как говориться “very basic”, но идею уловить можно и переписать код под свои задачи.
Posted in Code, Human Emulator | 2 Comments »
Tuesday, April 20th, 2010 |
Речь пойдет о такой замечательно программе, как Human Emulator. Мне кажется это оптимальное сочетание простоты и скорости написания небольших скриптов с довольно мощьным функционалом. На нем даже можно написать полоноценную спамилку. Вообщем продукт безусловно хороший и полезный, свою стоимость он оправдывает на 100%.
Программировать на Human Emulator – легко, но как всегда есть типовые задачи для которых неплохо было бы иметь сниппеты. Итак сниппет первый – автоконфирмер регистрацый которые приходят на ящик gmail. Суть проста – любой кодер без проблем уловит идею и перепишет как ему нужно.
Вызывается примерно так
gmail_confirmer($gmail, $pass, 'http://............./validate/', "Welcome to site ....");
Как видно 3ий параметр это с чего начинается строчка на которую нужно кликнуть, чтобы подтвердить регистрацию, а 4ый – это заголовок приходящего e-mail.
function gmail_confirmer($usr_mail, $usr_pass, $site_url, $search_str) {
include("include_all.php");
init_browser();
$browser->wait(3);
sleep(rand(1,3));
$browser->navigate("gmail.com");
$browser->wait(2);
$input->set_focus_by_name("Email");
$input->set_value_by_name("Email", $usr_mail);
$browser->wait(2);
$input->set_focus_by_name("Passwd");
$input->set_value_by_name("Passwd", $usr_pass);
$browser->wait(2);
$button->click_by_name("signIn");
$browser->wait(rand(2,6));
$anchor->click_by_inner_text("basic HTML", false);
$browser->wait(rand(2,6));
$anchor->click_by_inner_text($search_str, false);
$browser->wait(rand(2,6));
$urls = $anchor->get_all_urls();
$urls = explode("", $urls);
$url = array_find($site_url, $urls);
//$debug->message_box($url);
$browser->wait(3);
$browser->navigate($url);
$browser->wait(3);
return true;
}
Несколько пояснений include(“include_all.php”); – для того чотбы без проблем использовать объекты Human Emulator внутри функций. Выглядит файл примерно так :
// Yo
global $browser;
global $anchor;
global $input;
global $listbox;
global $button;
global $radiobox;
global $checkbox;
global $debug;
global $textarea;
global $inputimage;
global $captcha;
global $webpage;
global $app;
global $init_browser;
global $textfile;
global $btn;
global $inputfile;
global $debug;
global $frame;
global $form;
init_browser(); – инициализирует браузер. тут можно делать что угодно, очищать куки, делать рефреш.
Posted in Code, Human Emulator | 3 Comments »