[FAQ] Как грамотно писать скрипты под Human Emulator.

Возврат к списку

square_Flat_Design.jpg


Здравствуйте Уважаемые читатели мое блога, сегодня речь пойдет о грамотном написании скриптов под Human Emulator.
 1. Разгружаем ОЗУ
У продукта Human Emulator есть один маленький недостаток, который, как я полагаю, будет в будущем исправлен программистами. Ну не что не поделаешь, есть "поломка" надо её чинить или стоять на месте. На помощь нам придет класс для управления работой приложения *app и класс управления отладкой *debug. Советую в конце каждого скрипта, вставлять следующий код:
if ($debug->get_cur_mem_size()>268435456){ 
   $app->restart(); 
} 
Итак, с помощью функции $debug->get_cur_mem_size() мы получаем текущий размер памяти, занимаемый эмулятором. И как только текущий размер памяти больше 256 Мб, программа перезагружается.

2. Альтернатива цикла for()
Рассмотрим на примере. Допустим у нас есть файл sites.txt. В файле записаны построчно адреса сайтов, их около 100 000. Нам с помощью Human Emulator, на каждый сайт нужно зайти. Скрипт простой и хочется написать его с использованием цикла for()
<?php 
// The following code is required to properly run Xedant.com Human Emulator 
require("../Templates/xedant_human_emulator.php"); 

$sites=file("sites.txt"); 

for ($i=0;$i<count($sites);$i++) 
{ 

$browser->navigate($sites[$i]); 
$browser->wait_for(240,1); 

sleep(4); 
} 
// Quit 
$app->quit(); 
?> 
Данный метод хорош ,если у нас в списке мало адресов, но если их большое количество, десятки а то и сотни тысяч, здесь нужно использовать перезагрузку программы с помощью:
$app->restart();
Но с использованием цикла for() нельзя выполнять перезагрузку, т.к. весь цикл оборвется. Поэтому мы пойдем другим путем:
<?php 
// The following code is required to properly run Xedant.com Human Emulator 
require("../Templates/xedant_human_emulator.php"); 

$sites=file("sites.txt"); 
$site = array_shift($sites); 
$site = trim($site); 

if (!empty($site)){ 

$browser->navigate($site); 
$browser->wait_for(240,1); 

} 

      $write = implode("",$sites); 

      $fp = fopen ("sites.txt", "w+"); 
      fwrite ($fp, $write); 
      fclose ($fp); 

     if ($debug->get_cur_mem_size()>268435456){ 

   $app->restart(); 

  } 

// Quit 
$app->quit(); 
?> 
С помощью функции array_shift() мы извлекаем первый элемент массива и дальше работаем с ним, в конце скрипта мы объединяем элементы массива в строку (без первого элемента) и перезаписываем файл sites.txt. Можно сделать немного по-другому, без удаления сток из массива, но нужно создать файл i.txt и перед первым запуском скрипта записать в файл 0:
<?php 
// The following code is required to properly run Xedant.com Human Emulator 
require("../Templates/xedant_human_emulator.php"); 

$sites=file("sites.txt"); 

$i = file_get_contents("i.txt"); 

$site = trim($sites[$i]); 

if (!empty($site)){ 

$browser->navigate($site); 
$browser->wait_for(240,1); 

} 

      $write = $i++; 

      $fp = fopen ("i.txt", "w+"); 
      fwrite ($fp, $write); 
      fclose ($fp); 

// Quit 
$app->quit(); 
?>
Теперь идем в меню программы Скрипты=> Расписание скриптов => Добавить. Прописываем путь к нашему скрипту, в разделе Тип - ставим бесконечно.
 
3. Выполняйте проверку
 Я стараюсь писать скрипты с проверкой существования объектов. Например, скрипт авторизации в Твитере:
$browser->navigate('http://twitter.com/login'); 
$browser->wait_for(60,1); 

if($input->set_value_by_name('username_or_email',$login)===TRUE){ 
   $browser->wait_for(60,1); 

      if ($input->set_value_by_name('password',$pass)===TRUE){ 
          $browser->wait_for(60,1); 

                       if ($button->click_by_name('signin_submit')===TRUE){ 
                           $browser->wait_for(60,1); 

                           // выполняем какое нибудь действие  и т.д. 

                          } 

          { 

} 
Вот такой вот получился коротенький мануал, постепенно буду его обновлять и добавлять новое.

 Постовой: Очень важно психическое развитие ребенка. Родители - будьте заботливее.
>


Возврат к списку