Часто, по той или иной причине, в скрипте написанном под Human Emulator возникает
необходимость использования проксей (платных или фришных, с привязкой под IP или по
паролю — не суть важно).
Рассмотрим как корректно организовать такую работу. Во-первых нам нужен текстовый файл с проксями
в формате одна строка — один прокси. Пусть это будет «proxy.txt» в следующем формате — одна строка один прокси:
149.154.69.69:8080 188.120.231.243:8080 92.63.99.62:8080
Объявляем переменную в скрипте $str_proxy_path — для указания пути к файлу с проксями:
// путь к файлу с проксями $str_proxy_path = "data\proxy.txt";
и переменную
$i_cur_proxy = ' ';
которой будем присваивать текущий прокси.
В начале скрипта — устанавливаем прокси:
$i_cur_proxy = set_proxy($i_cur_proxy, $str_proxy_path);
if (!$i_cur_proxy)
{
echo "С проксями что-то не то - скрипт закончил работу!
";
// выходим из скрипта
$app->quit();
}
Функция set_proxy() находится в файле functions.php, который инклюдится в начале текущего скрипта. Вот её код:
function set_proxy($i_cur_proxy, $str_proxy_path)
{
global $browser, $app, $file_os;
// останавливаем навигацию
$browser->stop();
sleep(2);
// закрываем все вкладки браузера кроме главной
$browser->close_all_tabs();
sleep(2);
// чистим за собой всю информацию
$browser->clear_address_bar_history();
$browser->clear_cache();
$browser->clear_cookies("");
$browser->clear_history();
// переходим на чистую страницу
$browser->navigate("about:blank");
sleep(2);
// получаем прокси в массив
$arr_of_proxy = file($str_proxy_path);
// проверка остались ли в файле прокси
if (count($arr_of_proxy) == 0)
{
echo "в файле закончились прокси
";
return false;
}
$i_cur_proxy = "";
// выбираем новый прокси
$ii = 0;
while ($i_cur_proxy == "")
{
if ($ii > 10)
{
echo "С проксями что-то не так!!!";
return false;
}
// получаем случайный прокси
$ind = rand(0, count($arr_of_proxy)-1);
$i_cur_proxy = trim($arr_of_proxy[$ind]);
echo "Текущий прокси: $i_cur_proxy
";
$ii++;
}
// обнуляем прокси
$browser->disable_proxy("");
sleep(2);
// устанавливаем новый прокси
$browser->enable_proxy("", $i_cur_proxy);
sleep(2);
// возвращаем новый прокси
return $i_cur_proxy;
}
Еще один важный момент. Текущий прокси который мы используем в настоящий момент может просто «слететь».
В случае использования фришных проксей эта вероятность стремится к 100%. Поэтому при выполнении различного рода команд
в скрипте которые подразумевают переход по другому URL, например:
// переход на другой сайт $browser->navigate($my_site);
или
// кликание на ссылке
$anchor->click_by_inner_text("Внутренний текст ссылки", false);
и тому подобных, необходимо в скрипте сразу после их выполнения добавить проверочный код, который будет отслеживать «истинность»
перехода на другую страницу. Например:
$ii = 0;
while (!$image->is_exist_by_name("name_of_image"))
{
// ждем секунду
sleep(1);
// если ожидаем больше 50 секунд — значит проски слетел
if ($ii > 50)
{
echo "Битый прокси
";
// удаляем битый прокси из файла с проксями
delete_proxy($i_cur_proxy, $str_proxy_path);
sleep(3);
// чистимся
$browser->clear_address_bar_history();
$browser->clear_cache();
$browser->clear_cookies("");
$browser->clear_history();
// перезагружаемся для подключения нового прокси
$app->restart($debug->get_cur_script_path(),"", $app->get_port());
}
$ii++;
}
В условии
while (!$image->is_exist_by_name("name_of_image"))
необходимо привязаться к какому-либо элементу , который гарантировано существует на искомой странице.
Вот собственно и все. Удачного использования.
При необходимости можно купить прокси.
Так же для проверки прокси под любой сайт вы можете использовать наш скрипт проверки прокси.