Часто, по той или иной причине, в скрипте написанном под Human Emulator возникает
необходимость использования проксей (платных или фришных, с привязкой под IP или по
паролю — не суть важно).
Рассмотрим как корректно организовать такую работу. Во-первых нам нужен текстовый файл с проксями
в формате одна строка — один прокси. Пусть это будет «proxy.txt» в следующем формате — одна строка один прокси:
1 2 3 |
149.154.69.69:8080 188.120.231.243:8080 92.63.99.62:8080 |
Объявляем переменную в скрипте $str_proxy_path — для указания пути к файлу с проксями:
1 2 |
// путь к файлу с проксями $str_proxy_path = "data\\proxy.txt"; |
и переменную
1 |
$i_cur_proxy = ' '; |
которой будем присваивать текущий прокси.
В начале скрипта — устанавливаем прокси:
1 2 3 4 5 6 7 |
$i_cur_proxy = set_proxy($i_cur_proxy, $str_proxy_path); if (!$i_cur_proxy) { echo "С проксями что-то не то - скрипт закончил работу!<br>"; // выходим из скрипта $app->quit(); } |
Функция set_proxy() находится в файле functions.php, который инклюдится в начале текущего скрипта. Вот её код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
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 "в файле закончились прокси<br>"; 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<br>"; $ii++; } // обнуляем прокси $browser->disable_proxy(""); sleep(2); // устанавливаем новый прокси $browser->enable_proxy("", $i_cur_proxy); sleep(2); // возвращаем новый прокси return $i_cur_proxy; } |
Еще один важный момент. Текущий прокси который мы используем в настоящий момент может просто «слететь».
В случае использования фришных проксей эта вероятность стремится к 100%. Поэтому при выполнении различного рода команд
в скрипте которые подразумевают переход по другому URL, например:
1 2 |
// переход на другой сайт $browser->navigate($my_site); |
или
1 2 |
// кликание на ссылке $anchor->click_by_inner_text("Внутренний текст ссылки", false); |
и тому подобных, необходимо в скрипте сразу после их выполнения добавить проверочный код, который будет отслеживать «истинность»
перехода на другую страницу. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$ii = 0; while (!$image->is_exist_by_name("name_of_image")) { // ждем секунду sleep(1); // если ожидаем больше 50 секунд — значит проски слетел if ($ii > 50) { echo "Битый прокси<br>"; // удаляем битый прокси из файла с проксями 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++; } |
В условии
1 |
while (!$image->is_exist_by_name("name_of_image")) |
необходимо привязаться к какому-либо элементу , который гарантировано существует на искомой странице.
Вот собственно и все. Удачного использования.
При необходимости можно купить прокси.
Так же для проверки прокси под любой сайт вы можете использовать наш скрипт проверки прокси.