понедельник, 21 февраля 2011 г.

Дополнительные функции для Human Emulator

Чем удобен Хуман Эмулятор? Тем что в нём можно использовать любые php функции или php скрипты. Это делает программу реально гибкой и многофункциональной. Ниже приведены функции которые я использовал для написания одного из своих скриптов.

<?php

// //////////////////////////////// доп функции ///////////////////////////////////////////////////////////

// получить нужный текст. Используя последний параметр функцию можно вызывать много раз проходя по тексту файла или страницы пока последний параметр не станет равен -1.
function parse_text($body_text,$pref1,$pref2,$start_ind)
{
global $start_ind;
$ind = strpos($body_text,$pref1,$start_ind);
$ind1 = strpos($body_text,$pref2,$ind);

$res = substr($body_text, $ind+ strlen($pref1),$ind1-$ind-strlen($pref1));

$start_ind=$ind1;

return $res;
}

// получить нужный текст
function parse_text1($body_text,$pref1,$pref2,$start_ind)
{
global $start_ind;
$ind = strpos($body_text,$pref1,$start_ind);
//echo "ind = ".$ind."<br>";

if($ind===FALSE)
{
$start_ind=$ind;
return;
}

$ind1 = strpos($body_text,$pref2,$ind);

$res = substr($body_text, $ind ,$ind1-$ind+strlen($pref2));

$start_ind=$ind1;

return $res;
}

// получить нужный текст
function simple_parse_text($body_text,$pref1,$pref2)
{
$ind = strpos($body_text,$pref1);
$ind1 = strpos($body_text,$pref2,$ind);

$res = substr($body_text, $ind+ strlen($pref1),$ind1-$ind-strlen($pref1));

return $res;
}

// добавить в файл
function add_file($path,$page_body)
{
$file=fopen($path,"a+");
fputs($file,$page_body);

// close out file
fclose($file);
}
// получить заголовок и текст
function get_title_and_post($preftitle1,$preftitle2,$prfix1,$prfix2,$page_title,$page_post,$fld)
{
global $webpage,$page_title,$page_post,$textfile,$start_ind;
// получить body как текст
$page_body = $webpage->get_document_body(true);
$start_ind=0;
// получить заголовок
$page_title = parse_text($page_body,$preftitle1,$preftitle2,$start_ind);
$page_title = trim($page_title);
//echo "
";
// получить post
$page_post = parse_text($page_body,$prfix1,$prfix2,$start_ind);
$page_post = trim($page_post);

$page_post = replace_links($page_post,$fld);
// уберём лишнее
$page_post = str_replace("==========","====",$page_post);
}

// получить заголовок и текст
function get_text_title_and_post($preftitle1,$preftitle2,$prfix1,$prfix2,$filename)
{
global $webpage;
// получить body как текст
$page_body1 = $webpage->get_document_body(false);

// уберём лишнее
$page_post2 = str_replace("==========","",$page_post2);

// получить заголовок
$page_title2 = simple_parse_text($page_body1,$preftitle1,$preftitle2);
$page_title2 = trim($page_title2);

// получить post
$page_post2 = simple_parse_text($page_body1,$prfix1,$prfix2);
$page_post2 = trim($page_post2);


add_file($folder =".\\site\\".$filename.".txt",$page_title2."\n\n".$page_post2."\n\n") ;

}

// получить страницу по шаблону
function get_template($repl1,$repl2)
{
global $tmp,$page_title,$page_post;
// собрать готовую страницу
$temp = str_replace("TEXT_TITLE",$page_title,$tmp);
$temp = str_replace("TEXT_POST",$page_post,$temp );
$temp = str_replace('',$repl1,$temp);
$temp = str_replace('',$repl2,$temp );

return $temp;
}

// добавить в файл php подсветку
function set_php($page_post1)
{
global $webpage,$textfile,$start_ind,$app;

// получить body как текст
$page_text = $webpage->get_document_body(false);

$php_text = parse_text($page_text,"",0);

$php_text = str_replace("'","\\'",$php_text);
$php_text =" \n <?php highlight_string('<?php \n".$php_text."\n?>'); ?> \n";

$start_ind = strpos($page_post1,"Пример");
$page_php_text = parse_text($page_post1,"<DIV class=wp_syntax>","</PRE></DIV></DIV>",$start_ind);

$page_post1 = str_replace($page_php_text,$php_text,$page_post1);

$start_ind =0;
return $page_post1;
}

// заменить все ссылки
function replace_links($page_post,$fld)
{
global $obj_title,$start_ind;
// по всем ссылкам
$pr1 = '<A href="';
$pr2 = '</A>';
$pr3 = '">';

$start_ind=0;
while($start_ind!==FALSE)
{
// получить ссылку
$link1 = parse_text1($page_post ,$pr1,$pr2,$start_ind);
$link1."<br>";

$href1=simple_parse_text($link1,$pr1,$pr3);
$lnk_text=simple_parse_text($link1,$pr3,$pr2);


if( strtolower($lnk_text)==$obj_title)
{
$lnk = str_replace($href1,$fld.".php",$link1);
$page_post = str_replace($link1,$lnk ,$page_post);
continue;
}

$lnk = str_replace($href1,$fld."/".$lnk_text.".php",$link1);

$page_post = str_replace($link1,$lnk ,$page_post);
}

return $page_post;
}
?>

понедельник, 14 февраля 2011 г.

Перевод сайта на другой язык с помощью Human Emulator.

Иногда возникает потребность перевести ваш сайт на другой язык. Это можно сделать используя переводчик Googlе, естественно, качество такого перевода оставляет желать лучшего, но бывает достаточно и такого перевода. Ниже приведён скрипт который делает из русского сайта английский.


<?php

$xhe_host ="127.0.0.1:7010";

// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");

// //////////////////////////////////////////// функции ////////////////////////////////

// перевести текст
function translate($text_translate)
{
if($text_translate=="")
return "";

global $browser,$textarea,$listbox,$button,$element,$webpage;

$browser->navigate('http://translate.google.com/#ru|en|');
$browser->wait_for(60,1);

$textarea->click_by_name('text');
$textarea->set_value_by_name('source',$text_translate);

$button->click_by_name('gt-submit');
$browser->wait_for(60,1);

$text_res = $element->get_element_innerText_by_name("result_box");

// если не получили подождём и получем ещё раз - пока не получим перевод переводим
while($text_res=="")
{

$browser->navigate('http://translate.google.com/#ru|en|');
$browser->wait_for(60,1);

$textarea->click_by_name('text');
$textarea->set_value_by_name('source',$text_translate);

$button->click_by_name('gt-submit');
$browser->wait_for(60,1);

$text_res = $element->get_element_innerText_by_name("result_box");
}

return $text_res;
}

// //////////////////////////////////////////////////////////////////////////////////////////

// папка с результатами
$fld = "site\\eng\\";

$textfile->get_all_files_in_folder("site\\rus\\",'1.txt','true','false',10);

// получить список всех файлов в массив
$files = file('1.txt');
echo count($files)."
";
// пройтись по всем файлам
for($i=0;$i<count($files);$i++)
{
echo $files[$i].">br>";

// читаем файл
$str1 = $textfile->read_file(trim($files[$i]),10) ;

//echo $str1;
// перевести
echo $str1 = translate($str1 );
// получить путь для нового файла
$path_txt = str_replace("\\rus\\","\\eng\\",trim($files[$i]));

echo $path_txt.">br>";
// запишем файл
$textfile->write_file($path_txt,$str1,0) ;
}

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

четверг, 10 февраля 2011 г.

Заработать с помощью Хумана.

Теперь каждый желающий может заработать с помощью программы Human Emulator. Для это всего лишь нужно зарегистрироваться в партнерской программе, раскидать ссылки по своим ресурсам и получать с каждого пришедшего по этой ссылке и купившего 30% от стоимости купленного пакета.
Зарегаться можно тут

Партнерский интерфейс тестировался только в Google Chrome, в Firefox регистрация пока не работает. Всё остальное, от регистраций продаж и до отслеживания переходов, протестировано и настроено под все браузеры. По любым вопросам касательно партнёрки можно писать на мыло sales@humanemulator.info либо в ICQ 420-444-071.

Не упустите свой шанс заработать!

среда, 9 февраля 2011 г.

Набросок парсера для интернет магазина.

Вот тут со мной любезно поделились наброском парсера для интернет магазина.


<?php

$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://www.mobitrade.ua/pckomp/hdd/HP.html");
$browser->wait_for(30,1);

// получим все ссылки купить
$urls = $anchor->get_all_urls_by_inner_text("Купить","<br>");
// преобразуем в массив
$urls = explode ("<br>",$urls);
// для всех урл
for($i=0;$i{
// перейдём по ссылке
$browser->navigate($urls[$i],true);
$browser->wait_for(30,1);

sleep(1);
// получить заголовок
$title = $webpage->get_body_inter_prefix('<A class=zoomer title="','href="javascript',$as_html=true);
$title = substr($title, 0, strlen($title)-1);

// сохранить картинку товара
$path = "C:\\".$title.".jpg";
$image->save_to_file_by_name('sale_image', $path);

// вывести в окно отладки заголовок и текст
echo $title."
";
echo $webpage->get_body_inter_prefix('<DIV class=title','</DIV></DIV></DIV>',$as_html=true);
echo "<br><br>";
}

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

понедельник, 7 февраля 2011 г.

Удалённая работа с Human Emulator.

Далеко не все пользователи Human Emulator знают о том, что управление программой можно осуществлять удалёно. То есть Хуман стоит на каком-то сервере, и вы из браузера или из php скриптов на своём компьютере запускаете действия в хумане. Или же хуман стоит в локальной сети в офисе на одном компе, а вы можете со своего ноутбука управлять этим Human Emulator. При этом все действия для сервера и локальной сети одинаковые.

Предположим что Human Emulator стоит на сервере ip которого скажем 93.95.108.1 на порту 7010. Программа открыта и готова к работе.

Самый простой способ, не требующий никаких дополнительных действий это вызов команд из браузера. Просто берём и набираем в браузере такую вот строку http://93.95.108.1:7010/Browser.Navigate?url=google.ru и Хуман на сервере волшебным образом перешёл на google.com. Если ввести следующие команды :
http://93.95.108.1:7010/Browser.Navigate?url=http%3A%2F%2Fgoogle.com&use_cache=1
http://93.95.108.1:7010/Input.SetValueByName?name=q&value=human
http://93.95.108.1:7010/InputButton.ClickByNumber?number=0
то Human Emulator на сервере перейдёт на google.com в поисковую строку добавит слово human и нажмёт на кнопку поиска.

В скрипте хумана эти строки будут выглядеть так:
$browser->navigate('http://google.com');
$input->set_value_by_name('q',"human".$i);
$button->click_by_number(0);


Для того что бы из обычного вида получить команды для ввода в браузер достаточно открыть Информационную панель (меню Вид-> Информационная панель) и запустить скрипт на выполнение.

Второй способ, требует установки шаблонов программы Human Emulator на компьютер, с которого осуществляется удалённое управление. Для этого просто достаточно куда то скопировать папку Templates из папки с хуманом. Далее из командной строки php запускаем на выполнение скрипт со следующим кодом :

?php
$xhe_host ="93.95.108.1:7010";
// The following code is required to properly run XWeb Human Emulatorrequire("../Templates/xweb_human_emulator.php");
$browser->navigate('http://google.com');
// wait on browser
$browser->wait_for(30,1);
for($i;$i<50;$i++)
{
$browser->navigate('http://google.com');
// wait on browser
$browser->wait_for(30,1);
$input->set_value_by_name('q',"human".$i);
$button->click_by_number(0);
// wait on browser
$browser->wait_for(30,1);
echo $i."
";
// убрать set focus с окна отладки
$browser->navigate('about:blank');
// wait on browser
$browser->wait_for(30,1);
}
// Quit
$app->quit();
?>


И на сервере хуман выполнит этот скрипт.

Ещё один способ управления удалённо, это добавить скрипт Human Emulator в страничку вашего сайта и пользователь при нажатии каких либо элементов может запустить это скрипт, а хуман выполнит его.

Ну и последний способ удалённого управления это запуск скриптов в хумане, который стоит на управляеющем компе и эти скрипты будут выполняться на сервере. Для этого достаточно будет задать в начале скрипта строку $xhe_host ="93.95.108.1:7010"; как это сделано в примере скрипта выше.

Удачного вам удалённого управления. :)

четверг, 3 февраля 2011 г.

Работа с данными используя Human Emulator

Давичи передо мной встала задача в коде одной из моих программ поменять огромное количество строк. Я решил не заниматься этим в ручную и быстренько накатал скрипт на Хумане, который всё сделал за несколько секунд. В итоге написание скрипта и его выполнение заняло не более 5 минут.

Скрипт делает следующее берёт строку из файла logins.txt, которая выглядит так - pMenu->ModifyMenu(ID_FILE_ZIP_AND_EMAIL_ALL_FILE,MF_BYCOMMAND,theApp.tr.GetString("&Zip and E-Mail All File To ...")); и подставляет значение ID_FILE_ZIP_AND_EMAIL_ALL_FILE после MF_BYCOMMAND, таким образом в результате мы имеем строку в таком вот виде pMenu->ModifyMenu(ID_FILE_ZIP_AND_EMAIL_ALL_FILE,MF_BYCOMMAND,ID_FILE_ZIP_AND_EMAIL_ALL_FILE,theApp.tr.GetString("&Zip and E-Mail All File To ..."));.

код скрипта:

$xhe_host ="127.0.0.1:7010";

// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");

// получить строки из файла в массив
$strings = file("logins.txt");

// получить линию в нужном нам виде
function get_line($str)
{
// префиксы для разбора
$pref1= "ModifyMenu(";
$pref2= "MF_";
$pref3= "theApp.tr.GetString(";
// находим префиксы
$ind = strpos($str,$pref1);
$ind1 = strpos($str,$pref2,$ind);
// получаем строку
$res = substr($str, $ind+ strlen($pref1),$ind1-$ind-strlen($pref1));
// выводим в окно отладки для контроля процесса
echo $res."
";
// получаем индекс префикса
$ind2 = strpos($str,$pref3);
// формируем нужную нам строку
$res = substr($str,0,$ind2).$res .substr($str,$ind2,strlen($str)-$ind2);
// выводим результат в окно отладки
echo $res."
";

return $res;
}
// переменная куда будем получать результат
$data="";
// пройтись по всем строкам
for($i=0;$i{
global $data;
// получить i-ю строку
$line = $strings[$i];
// добавим в результат изменённую строку
$data=$data.get_line($line);
}
// запишем результат в файл
$textfile->write_file("data.txt",$data,0) ;

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


Для выполнения скрипта нужно создать файл login.txt который будет содержать строки типа pMenu->ModifyMenu(ID_FILE_ZIP_AND_EMAIL_ALL_FILE,MF_BYCOMMAND,theApp.tr.GetString("&Zip and E-Mail All File To ...")); в папке, в которой лежит скрипт.