СКРИПТ: Добавление возможных друзей.

Автоматизация вконтакте, мой мир, одноклассники, фейсбук, твиттер.
albert_seo
Сообщения: 16
Зарегистрирован: 26 апр 2017, 15:01

СКРИПТ: Добавление возможных друзей.

Сообщение albert_seo » 20 окт 2017, 11:29

Пишу скрипт, который добавляет возможных друзей. Это когда вы переходите на страницу https://vk.com/friends и там есть панелька с названием Возможные друзья. Из этой панельки можно легально добавлять в день определённое количество друзей.

Логика простая - зашли в аккаунт, перешли на страницу друзья и кликаем на ссылки "Добавить в друзья" и так пока не появилась капча или не вышел дневной лимит.

С капчей у меня пока так - если появилась капча ждём от 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();
?>

gerar
Сообщения: 38
Зарегистрирован: 01 май 2012, 09:08

Re: Добавление возможных друзей.

Сообщение gerar » 21 май 2018, 14:51

Спасибо что поделился

albert_seo
Сообщения: 16
Зарегистрирован: 26 апр 2017, 15:01

Re: Добавление возможных друзей.

Сообщение albert_seo » 22 авг 2018, 18:26

Так я и не смог победить рекапчу с помощью звука. Использовал пример отсюда http://humanemulator.net/objects/SYSTEM ... digits.php. Но не смог отладить под VK так как Google быстро банит. Решил использовать сервис anti-captcha.com.

Нашёл вот этот пример
$api = new NoCaptchaProxyless();
$api->setVerboseMode(true);
        
//your anti-captcha.com account key
$api->setKey("12345678901234567890123456789012");
 
//recaptcha key from target website
$api->setWebsiteURL("http://http.myjino.ru/recaptcha/test-get.php");
$api->setWebsiteKey("6Lc_aCMTAAAAABx7u2W0WPXnVbI_v6ZdbM6rYf16");

if (!$api->createTask()) {
    $api->debout("API v2 send failed - ".$api->getErrorMessage(), "red");
    return false;
}

$taskId = $api->getTaskId();

if (!$api->waitForResult()) {
    $api->debout("could not solve captcha", "red");
    $api->debout($api->getErrorMessage());
} else {
    echo "\nhash result: ".$api->getTaskSolution()."\n\n";
}

но так как описания не нашёл к нему так и не разобрался как его использовать для VK. Может кто уже разобрался с этим?

Аватара пользователя
Support
Site Admin
Сообщения: 1000
Зарегистрирован: 10 апр 2009, 17:45
Контактная информация:

Re: Добавление возможных друзей.

Сообщение Support » 22 авг 2018, 19:17

подробное описание можно найти на сайте anticaptchа.

по поводу примера:
// задаём ключ антикапчи
$api->setKey("12345678901234567890123456789012");

// урл где находится капча 
// в случае с vk указываем страницу на которой отображается капча 
// в вашем скрипте это
$api->setWebsiteURL("https://vk.com/friends");

// из документации Находим в коде тег с параметром sitekey:
// <div class="g-recaptcha" data-sitekey="6Lc_aCMTAAAAABx7u2W0WPXnVbI_v6ZdbM6rYf16"></div>
// тут есть один нюанс данный ключ может быть не только в этом тэге но и например в конструкиции
//src="/recaptcha/api2/bframe?hl=ru&v=v1531759913576&k=6Le00B8TAAAAACHiybbHy8tMOiJhM5vh88JVtP4c&cb=ut68rfevwghy#bcoy17j90g2u"
// то есть его можно взять и отсюда из любого src который имеет отношение к рекапче
$api->setWebsiteKey("6Le00B8TAAAAACHiybbHy8tMOiJhM5vh88JVtP4c");

// а далее делаем всё как в примере на антикапче
if (!$api->createTask()) {
    $api->debout("API v2 send failed - ".$api->getErrorMessage(), "red");
    return false;
}
$taskId = $api->getTaskId();

if (!$api->waitForResult()) {
    $api->debout("could not solve captcha", "red");
    $api->debout($api->getErrorMessage());
} else {
      $result = $api->getTaskSolution();
    echo "\nhash result: ".$result."\n\n";}

// полученный результат отправляем в нужное поле
$hiddeninput->set_value_by_attribute("id", "recaptcha-token", false,$result,4);
sleep(1);

// в вк для того что бы вызвать проверку поля просто делаем обновление страницы 
// тогда наша распознавание срабатывает
// определить очень просто  - если после обновления сразу при нажатии 
// на добавить в друзья опять будет рекапча значит не сработало
// в противном случае вы добавите ещё несколько друзей и только потом увидите рекапчу
$browser->refresh();

albert_seo
Сообщения: 16
Зарегистрирован: 26 апр 2017, 15:01

Re: Добавление возможных друзей.

Сообщение albert_seo » 22 авг 2018, 19:50

Ура заработало!

Теперь мой скрипт выглядит так :
<?php

$xhe_host = "127.0.0.1:7011";

// 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);

$sitekey ='6Le00B8TAAAAACHiybbHy8tMOiJhM5vh88JVtP4c';

$api = new NoCaptchaProxyless();
$api->setVerboseMode(true);

//$textarea->set_value_by_name("g-recaptcha-response", "");

        
//your anti-captcha.com account key
$api->setKey("ключ антикапчи тут");
 
//recaptcha key from target website
$api->setWebsiteURL("https://vk.com/friends");
$api->setWebsiteKey($sitekey);

// проверка вошли ли в аккаунт
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 $hiddeninput,$api,$browser;


if (!$api->createTask()) {
    $api->debout("API v2 send failed - ".$api->getErrorMessage(), "red");
    return false;
}

$taskId = $api->getTaskId();

if (!$api->waitForResult()) {
    $api->debout("could not solve captcha", "red");
    $api->debout($api->getErrorMessage());
} else {
      $result = $api->getTaskSolution();
    echo "\nhash result: ".$result."\n\n";}

$hiddeninput->set_value_by_attribute("id", "recaptcha-token", false,$result,4);

sleep(1);

$browser->refresh();
}
// получить нумер 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();
?>

albert_seo
Сообщения: 16
Зарегистрирован: 26 апр 2017, 15:01

Re: Добавление возможных друзей.

Сообщение albert_seo » 22 авг 2018, 19:54

Мне вот только не понятно как вы определили что результат должен вставляться именно сюда:
$hiddeninput->set_value_by_attribute("id", "recaptcha-token", false,$result,4);
в документации на anticaptcha речь идёт о
Решение рекапчи (g-recaptcha-response) валидно еще 120 секунд после генерации. Таким образом, у вашего приложения остается полно времени чтобы зайти на нужную форму и сделать ее сабмит с заранее полученным g-recaptcha-response параметром.

Аватара пользователя
Support
Site Admin
Сообщения: 1000
Зарегистрирован: 10 апр 2009, 17:45
Контактная информация:

Re: Добавление возможных друзей.

Сообщение Support » 22 авг 2018, 20:28

albert_seo писал(а):
22 авг 2018, 19:54
Мне вот только не понятно как вы определили что результат должен вставляться именно сюда:
$hiddeninput->set_value_by_attribute("id", "recaptcha-token", false,$result,4);
в документации на anticaptcha речь идёт о
Решение рекапчи (g-recaptcha-response) валидно еще 120 секунд после генерации. Таким образом, у вашего приложения остается полно времени чтобы зайти на нужную форму и сделать ее сабмит с заранее полученным g-recaptcha-response параметром.
В процессе поиска этого самого g-recaptcha-response наткнулся на recaptcha-token в двух фреймах в 3 и в 4. Когда руками разгадал капчу обратил внимание на то что recaptcha-token в последнем фрейме меняется при положительном разгадывании. А далее, так как при вводе капчи руками она сразу же исчезает, решил попробовать менять value последнего recaptcha-token и делать обновление страницы, и получилось )).

albert_seo
Сообщения: 16
Зарегистрирован: 26 апр 2017, 15:01

Re: Добавление возможных друзей.

Сообщение albert_seo » 22 авг 2018, 20:33

Support писал(а):
22 авг 2018, 20:28
В процессе поиска этого самого g-recaptcha-response наткнулся на recaptcha-token в двух фреймах в 3 и в 4. Когда руками разгадал капчу обратил внимание на то что recaptcha-token в последнем фрейме меняется при положительном разгадывании. А далее, так как при вводе капчи руками она сразу же исчезает, решил попробовать менять value последнего recaptcha-token и делать обновление страницы, и получилось )).
А искали как? Через исходники страницы? Это ж сколько кода надо просмотреть и как увидеть что поменялось значение? Инспектор?

Аватара пользователя
Support
Site Admin
Сообщения: 1000
Зарегистрирован: 10 апр 2009, 17:45
Контактная информация:

Re: Добавление возможных друзей.

Сообщение Support » 22 авг 2018, 20:44

albert_seo писал(а):
22 авг 2018, 20:33
А искали как? Через исходники страницы? Это ж сколько кода надо просмотреть и как увидеть что поменялось значение? Инспектор?
В studio есть возможность "Показать инструменты разработчика" с помощью этого инструмента сначала смотрел что к чему при отображении рекапчи. А g-recaptcha-response искал с помощью инструмента Список элементов. Там можно выбрать нужный элемент и посмотреть их во всех frame страницы. Я задал туда hiddeninput. При обновлении списка обновляются и их значения, так и нашёл recaptcha-token и заметил что он меняется после ввода капчи руками. Можете сами посмотреть.

albert_seo
Сообщения: 16
Зарегистрирован: 26 апр 2017, 15:01

Re: Добавление возможных друзей.

Сообщение albert_seo » 22 авг 2018, 21:14

Да так и есть. Спасибо за помощь!

Аватара пользователя
freemast
Сообщения: 12
Зарегистрирован: 05 апр 2019, 21:27

Re: Добавление возможных друзей.

Сообщение freemast » 18 апр 2019, 16:44

Как выполнить проверку на решение капчи?
В моем случае обновление страницы не проканает.

Аватара пользователя
Support
Site Admin
Сообщения: 1000
Зарегистрирован: 10 апр 2009, 17:45
Контактная информация:

Re: Добавление возможных друзей.

Сообщение Support » 18 апр 2019, 16:55

freemast писал(а):
18 апр 2019, 16:44
Как выполнить проверку на решение капчи?
В моем случае обновление страницы не проканает.
тогда можно попробовать вот так к примеру :
        
$textarea->set_value_by_attribute("id", "g-recaptcha-response",true,$result);
sleep(2);
$form->submit_by_id("login_form");
ТО есть делать сабмит формы. Просто в ВК там нет ни кнопок ничего такого и там когда капчу распознаёшь она просто исчезает. Если у вас капча в какой то форме, то после распознавания нужно делать сабмит этой формы.

Аватара пользователя
freemast
Сообщения: 12
Зарегистрирован: 05 апр 2019, 21:27

Re: Добавление возможных друзей.

Сообщение freemast » 18 апр 2019, 17:23

Support писал(а):
18 апр 2019, 16:55
Если у вас капча в какой то форме, то после распознавания нужно делать сабмит этой формы.
Это понятно. Вопрос был в том что капча решается а вот зелененькая галочка на капче не появляется, то есть когда я жму на кнопку мне говорят ошибка: вы превысили кол-во ошибок.

Аватара пользователя
Support
Site Admin
Сообщения: 1000
Зарегистрирован: 10 апр 2009, 17:45
Контактная информация:

Re: Добавление возможных друзей.

Сообщение Support » 18 апр 2019, 17:47

freemast писал(а):
18 апр 2019, 17:23
Support писал(а):
18 апр 2019, 16:55
Если у вас капча в какой то форме, то после распознавания нужно делать сабмит этой формы.
Это понятно. Вопрос был в том что капча решается а вот зелененькая галочка на капче не появляется, то есть когда я жму на кнопку мне говорят ошибка: вы превысили кол-во ошибок.
Скорее всего вы не верно задаёте результат, вот смотрите ещё пример:
  
$checkbox->click_by_id("auth-register-agree-checkbox");

  if($textarea->is_exist_by_attribute("id", "g-recaptcha-response", false))
  {
    // а далее делаем всё как в примере на антикапче
    if (!$api->createTask()) {
    $api->debout("API v2 send failed - ".$api->getErrorMessage(), "red");
    return false;
    }
    $taskId = $api->getTaskId();
     
    if (!$api->waitForResult()) {
    $api->debout("could not solve captcha", "red");
    $api->debout($api->getErrorMessage());
    } 
    else {
    $result = $api->getTaskSolution();
    echo "\nhash result: ".$result."\n\n";}
     
    // полученный результат отправляем в нужное поле
    $hiddeninput->set_value_by_attribute("id", "recaptcha-token", false, $result,1);
    $textarea->set_value_by_attribute("id", "g-recaptcha-response", false, $result);
    sleep(1);
  }

    $btn->click_by_inner_text("Далее");
    $browser->wait_for();

Аватара пользователя
freemast
Сообщения: 12
Зарегистрирован: 05 апр 2019, 21:27

Re: Добавление возможных друзей.

Сообщение freemast » 18 апр 2019, 18:28

Работает. Дело было в цифре 4. Спасибо!

Ответить