На основе большого опыта работы с движком HumanEmulator, обратил внимание, что можно повысить отказоустойчивость, если не использовать функций работы с файлами, такие как: $textfile и $file_os . Это связанно с тем, что HumanEmulator принимает команды, как запросы серверу, соответственно большой поток таких команд может привести к критическим ошибкам в работе приложения, также наблюдается небольшой прирост к скорости исполнения. Ниже представлен альтернативный список методов.
//Получить размер фала в байтах
$file_size = $file_os->get_size("res\\text.txt");
//Альтернатива
$file_size = filesize ("res\\text.txt");
//Получить число строчек в файле
$lines_count = $textfile->get_lines_count("data\\text.txt");
//Альтернатива
$lines_count = get_lines_count("data\\text.txt");
// Создание/Перезапись файла и запись в него текста
$textfile->write_file($file_path,$text,60);
//Альтернатива
file_put_contents($file_path, $text);
// Добавить текст в конец файла
$textfile->add_string_to_file("res\\file.txt", $text, 60) ;
//Альтернатива
file_put_contents($file, $str, FILE_APPEND | LOCK_EX);
//Проверить существование файла
if($file_os->is_exist("res\\text.txt")){
}
//Альтернатива
if(file_exists("res\\text.txt")){}
//Удалить файл
$file_os->delete("res\\text.txt"))
//Альтернатива
unlink("res\\text.txt");
//Заменить строки в файле на другое значение
$textfile->replace_string("data\\text.txt", "data\\text.txt", $old_value, $new_value, 60);
//Альтернатива (для одного и того же файла)
//read the entire string
$str=file_get_contents($file);
//replace something in the file string - this is a VERY simple example
$str=str_replace($oldValue, $newValue, $str);
//write the entire string
file_put_contents($file, $str);
//Получить n строчку из файла
$val = $textfile->get_line_from_file("data\\text.txt", false, $n, 60);
//Альтернатива
function get_line_from_file($file, $line_num, $delimiter="\n")
{
/*** set the counter to Zero ***/
$i = 0;
/*** open the file for reading ***/
$fp = fopen( $file, 'r' );
/*** loop over the file pointer ***/
while ( !feof ( $fp) )
{
/*** read the line into a buffer ***/
$buffer = stream_get_line( $fp, 9999, $delimiter );
/*** if we are at the right line number ***/
if( $i == $line_num )
{
/*** return the line that is currently in the buffer ***/
return rtrim($buffer);
}
/*** increment the line counter ***/
$i++;
/*** clear the buffer ***/
$buffer = '';
}
return false;
}
//Код для получения 0 линии в файле
//Code for get 0 line number from target file
$user_agent= $textfile->get_line_from_file("data\\useragents.txt", false, 0, 60);
// Код для установки браузеру UserAgent в HumanEmulator
// Code for set UserAgent ащк IE in HumanEmulator
$browser->set_user_agent($user_agent);
Файл useragents.txt содержит список проверенных UserAgent ов
File useragents.txt contains list valid UserAgent s
Google drive
В последних версиях HumanEmulator появилась возможность использовать .NET C#.
В продолжении темы использования .NET хочу представить исходный код UnitTest проекта сделанного на основе представленных в HumanEmulator новых классов.
К сожалению на текущий момент для ознакомления с функциональностью нужно производить ряд манипуляций что не вполне удобно. Я свел все методы в один проект и сделал это в понятном виде, в виде тестов.
На картинке пример полностью переделанного рабочего метода по этому образцу можно редактировать остальные методы.
Для работы тестов необходимо запустить экземпляр HumanEmulator настроенный на порт 7015.
При запуске в режиме Debug в Output должен выйти следующий текст:
Запуск теста interface.click
1. Перейдем на полигон :
2. Щелкнем по элементу с href равным http://www.bigfozzy.com/
3. Кликнем по элементу с текстом SEO Магазин и выведем его координаты
Координаты x = -1 y = 615
Ссылка для скачивания : googledrive
Если запуск не происходит, то следует перезапустить HumanEmulator.
В настоящий момент наблюдаются сбои в работе на стороне сервера, то есть иногда может потребоваться перезагрузка компьютера.
В последних версиях HumanEmulator появилась возможность использовать .NET C#.
Внимательные пользователи смогли обнаружить в проекте две новые папки:
XWeb\Human Emulator Advanced 4.9.19\Templates CSHARP — содержит проект .NET библиотеки для работы с сервером HumanEmulator.
XWeb\Human Emulator Advanced 4.9.19\Test Samples CSHARP — содержит примеры использования классов.
Каждый пример отдельный файл со статическим методом Main.
Для запуска необходимо:
- создать проект консольного приложения, поместить туда класс из примера(можно заменить пустой файл Program.cs)
- добавить проект XWeb\Human Emulator Advanced 4.9.19\Templates CSHARP \Lib\XHE\XHE\XHE.csproj
- запустить приложение HumanEmulator. Класс \XWeb\Human Emulator Advanced 4.9.19\Templates CSHARP\Lib\XHE\XHE\XHEScript.cs содержит строку
public static string server = «127.0.0.1:7017» — это локальный адрес нашего компьютера и порт 7017, что означает, что необходимо запущенный экземпляр HumanEmulator установить на 7017 порт (в данном случае).
- теперь можно скомпилировать и запустить консольное приложение.
Вот проект-пример, что должно было получится скачать здесь.
Примечание: Думаю большинство пользователей не ведают о том что запускаемое приложение HumanEmulator является двойным. Одновременно клиент и управляемый сервер.
В запущенном экземпляре HEmulator можно наблюдать за переходами на целевом сайте. Если вы скачали пример то можно наблюдать такую последовательность работы:
1.Переход по адресу www.humanemulator.net/poligon/anchor.html
2. Переход щелчком мыши по элементу с href равным http://www.bigfozzy.com/
3. Переход на SEO Магазин
А вот как будет выглядеть консоль вывода приложения:
Как видно привычный процесс теперь происходит в двух окнах. HEmulator теперь сервер(управляемый) . А наше консольное приложение посылает ему команды (Request) и принимает ответы с данными о выполнении.
Вывод:
Плюсы:
- Стал доступен весь арсенал возможностей, что и был в базовой версии для .NET.
- HumanEmulator теперь можно интегрировать в другие проекты
- Теперь можно использовать мощь интегрированной среды разработки VisualStudio
- Нет больше детских болезней php
Минусы: Интерфейс пользователя меню и подсказки HumanEmulator в помощь разработчику тепtрь не доступны, но для серьезной работы это не будет помехой.
Этот блог предназначен для освещения возможностей HumanEmulator . Этот продукт, который обладает большим потенциалом для решения различных задач.
Я считаю, что каждая статья, которая здесь будет предоставлена станет открытием новых интересных возможностей применения HumanEmulator а.