Логика простая - зашли в аккаунт, перешли на страницу друзья и кликаем на ссылки "Добавить в друзья" и так пока не появилась капча или не вышел дневной лимит.
С капчей у меня пока так - если появилась капча ждём от 5 до 20 минут и перезапускаем скрипт сначала. Какое то время капча не будет выдаваться и скрипт сможет добавить ещё несколько друзей и так далее.
Конечно, хорошо бы распознавать капчу с помощью звука, но пока у меня это не получилось - заблокировали за подозрение на бота)). Буду благодарен за любую помощь с капчей.
Текст скрипта:
<?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"); // данные аккаунта вк $lg_vk=""; $pwd_vk=""; // переходим на моблильный вк $browser->navigate("https://vk.com/"); // задаём русский язык $anchor->click_by_inner_text("Русский",false); // логинимся в вк $input->set_value_by_name("email",$lg_vk); $input->set_value_by_name("pass",$pwd_vk); $button->click_by_number(0); // проверка вошли ли в аккаунт if($div->is_exist_by_inner_text("Не удается войти",false)) { echo "Не удается войти в аккаунт!"; $app->quit(); } sleep(rand(1,3)); // проверяем есть ссылки на друзей check_friends(); // добавляем пока есть ссылки add_friends(); // ////////////////////////// дополнительные функции //////////////// // проверяем есть ссылки на друзей function check_friends() { global $anchor; // проверим есть ли див с нужным нам текстом if(!$anchor->is_exist_by_inner_text("Добавить в друзья", true)) { echo "нет друзей обновляем страницу <br>"; $anchor->click_by_href("/friends",false); sleep(2); } echo "можем добавить друзей<br>"; } // добавляем друзей function add_friends() { global $div, $anchor,$app, $debug; $fr_num=1; while($anchor->is_exist_by_inner_text("Добавить в друзья", true)===true) { $anchor->click_by_inner_text("Добавить в друзья",true); sleep(rand(1,3)); $fr_num ++; if($div->is_exist_by_inner_html("Подтверждение действия",false)) { echo "есть капча<br>"; recognize(); sleep(rand(30, 300)); $app->restart($debug->get_cur_script_path(),$app->get_port(),$app->get_port()); } if($div->is_exist_by_inner_text("К сожалению, Вы не можете добавлять больше друзей за один день.",false)) { echo "Все друзья на сегодня добавлены"; $app->restart(); } echo "добавили друга $fr_num <br>"; } } // попытка распознавать капчу function recognize() { global $div,$btn,$anchor; if($div->is_exist_by_inner_html("Подтверждение действия",false)) { echo "есть капча<br>"; $num_fr = check_in_frame("class","recaptcha-checkbox-checkmark",false); echo "номер frame $num_fr<br>"; $div->click_by_attribute("class","recaptcha-checkbox-checkmark",false,$num_fr); // кнопка сохранение звуковой капчи if($btn->is_exist_by_name("recaptcha-audio-button",$num_fr+1)) { echo "есть звуковая капча<br>"; $btn->click_by_name("recaptcha-audio-button",$num_fr+1); sleep(rand(1,3)); $anchor->click_by_attribute("class","rc-audiochallenge-tdownload-link",true,$num_fr+1); } } } // получить нумер frame в которого находится элемент с таким параметром function check_in_frame($att_name,$att_value,$exactly=false) { global $div; for($i=0;$i<10;$i++) { if($div->is_exist_by_attribute($att_name,$att_value,$exactly,$i)) { return $i; } } retrun -1; } // Quit $app->quit(); ?>