автоматизация социальных сейтей с помощью Human Emulator

Авторизация в социальной сети ВКонтакте с помощью Human Emulator

Что делает скрипт:
Банально, скрипт производит авторизацию в социальной сети ВКонтакте.

Алгоритм:
— переходим на vk.com;
— вводим логин;
— вводим пароль;
— нажимаем кнопку «Войти».

Дополнительная информация:
— предварительно необходимо присвоить соответствующим переменным логин и пароль;
— скрипт сделан и протестирован под Studio 7.0.28.
скрипт обновлен

<?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");

// //////////////////////// настройки скрипта /////////////////////////
// логин и пароль для входа в ВК(необходимо заполнить)
$login = "";   // необходимо ввести логин для ВК
$pass = "";   // необходимо ввести пароль для ВК
// время ожидания
$wt = 5;
$wt_long = 10;

// /////////////////////// скрипт ///////////////////////////////////////////
echo "Скрипт запустили<br>";

echo "Переходим на сайт ВК<br>";
$browser->navigate("http://vk.com/");
sleep($wt_long);

echo "Авторизируемся<br>";
$input->send_keyboard_input_by_name("email", $login);
sleep($wt);
$input->set_focus_by_name("pass");
$input->send_keyboard_input_by_attribute("id","index_pass",true, "$pass");
sleep($wt);
echo "нажимаем кнопку Войти<br>";
$btn->click_by_inner_text("Войти",false);
$btn->click_by_name("index_login_button");
sleep($wt_long);

echo "Скрипт закончил работу";
// Quit
$app->quit();
?>

Видео пример работы скрипта:

Скрипт Human Emulator парсинга HTML-страницы с использованием XPath

В этой статье мы рассмотрим один из примеров написания скрипта для парсинга HTML-страниц с использованием XPath на примере сайта bing.com.


Сперва определимся с тем, что такое XPath и зачем оно нужно, если есть регулярные выражения?


XPath (XML Path Language) — это язык запросов к элементам XML-подобного документа (далее для краткости просто XML).

XPath призван реализовать навигацию по DOM в XML.

Regexp — формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов.

По сути это строка-образец (шаблон), состоящая из символов и метасимволов и задающая правило поиска.

Итак, главная разница в том, что XPath специализируется на XML, а Regexp — на любом виде текста.

В: Зачем использовать XPath, если есть regexp, в котором можно сделать тоже самое?
О: Простота поддержки.

Синтаксис у regexp такой, что уже через неделю может быть проще всё переписать, чем вносить изменения,
а с XPath можно спокойно работать. И синтаксис у xpath довольно компактный,xml’ё-фобы могут быть спокойны.

Простой пример для вдохновения — получим значение атрибута «href» у, например, тега «a».

Yohoho!

Regexp:



XPath:

"string(//a/@href)"

XPath + PHP:

$dom = new DOMDocument;

// "@" Это, конечно, плохо. Но HTML не обязан быть
// валидным, в отличие от XML.
@$dom->loadHTML("Yohoho!");

$xpath = new DOMXpath($dom);
    
$res = $xpath->query("//a");
    
echo $res->item(0)->getAttribute("href") . PHP_EOL;

Быстро (несколько небольших страниц) пробежаться по основам XPath можно в туториале от W3Schools.

Как использовать XPath в PHP можно почитать в документации на php.net.
И в небольшом тутораильчике от IBM DeveloperWorks.

Теперь определимся с необходимым функционалом скрипта:

* Возможность указывать произвольный поисковый запрос


* Парсим только первую страницу поисковой выдачи


* Из поисковой выдачи нам нужно:


* заголовок


* ссылка


* номер в выдаче

Исходя из нашего ТЗ составляем примерный алгоритм работы скрипта:

1) Заходим на bing.com


2) Вводим поисковую фразу


3) Получаем со страницы необходимый результат

Приступим к написанию парсера поисковой выдачи http://bing.com.
Для начала, создадим базовый каркас скрипта.

    // coding: windows-1251
    // Настройка HumanEmulator
    // -----------------------------------------------
    // Где запущен XHE
    $xhe_host = "127.0.0.1:7010";
    // HumanEmulator lib
    require "../../Templates/xweb_human_emulator.php";
    // Our tools
    require "tools/functions.php";
    
    // Настройки скрипта
    // -----------------------------------------------
    
    // Скрипт
    // -----------------------------------------------
    
    // Quit
    $app->quit();

В настройки добавим переменную для хранения поискового запроса.

// Поисковый запрос
$text = "ХуманЭмулятор";

Заходим на сайт.

// Базовый URL
$base_url = "https://www.bing.com/?setlang=en";
$browser->navigate($base_url);

Вводим поисковую фразу.

$input->set_value_by_attribute("name", "q", true, $text);
sleep(1);
$element->click_by_attribute("type", "submit");
sleep(5);

Сохраним в переменную содержимое страницы.

// Получаем содержимое страницы
$content = $webpage->get_body();

Настроим xpath-объект:

$dom = new DOMDocument;
@$dom->loadHTML($content);
$xpath = new DOMXpath($dom);

Теперь у объекта $xpath есть метод «query» в который мы будем передавать наше xpath-выражение.
Давайте начнём создавать xpath-выражение.
Открыв исходный код страницы с результатами поисковой выдачи увидим, что сами результаты находятся внутри тега «li».

  • Т.о. наше xpath-выражение выберет со страницы все поисковые результаты.

    $results = $xpath->query("//li[@class=\"b_algo\"]");
    

    На одной странице у нас должно быть 1 или больше результатов, проверим себя:

    if($results === false)
        {
            echo "С нашим xpath-выражением что-то не так." . PHP_EOL;
            $app->quit();
        }
        elseif($results->length === 0)
        {
            echo "Поисковый запрос '{$text}' не принёс результатов." . PHP_EOL:
            $app->quit();
        }
        echo "Нашли {$results->length} совпадений." . PHP_EOL;
    

    Здесь стоит обратить внимание на ветку if, где мы сравниваем кол-во результатов xpath-поиска с нулём.
    Если наше xpath-выражение ничего не нашло, то это может означать две вещи:


    * Bing действительно ничего не нашёл.


    * Bing что-то нашёл, но поменял вёрстку на странице, и наше xpath-выражение необходимо исправлять.

    2-й пункт достаточно коварный, в таких случаях, когда xpath-выражение ничего не находит необходимо дополнительно
    сверятся, чтобы удостоверится, что xpath-выражение не устарело (хотя и это не даст 100% гарантий).

    В нашем случае будем сверяться с тем, что Bing пишет кол-во найденных результатов.

    14 results
    

    А если результатов по поисковому запросу нет, то:

  • No results found for ...

  • Т.о. мы получаем такую конструкцию проверки:


    — Если xpath-запрос ничего не нашёл и поисковый запрос ничего не нашёл, то на странице будет html-код с «No results found».


    — Если xpath-запрос ничего не нашёл, а поисковый запрос что-то нашёл, то на странице будет html-код с «N results».

    Обновим проверку результата xpath-запроса.

    if($results === false)
        {
            echo "С нашим xpath-выражением что-то не так." . PHP_EOL;
            $app->quit();
        }
        elseif($results->length === 0)
        {
            // Если bing ничего не нашёл
            $check_results1 = $xpath->query("//li[@class=\"b_no\"]");
            // Если bing что-то нашёл
            $check_results2 = $xpath->query("//span[@class=\"sb_count\"]");
            
            if($check_results1 === false or $check_results2 === false)
            {
                echo "С нашим xpath-выражением что-то не так." . PHP_EOL;
                $app->quit();
            }
            
            if($check_results1->length > 0 and $check_results2->length === 0)
            {
                echo "Поисковый запрос '{$text}' не принёс результатов." . PHP_EOL:
                $app->quit();
            }
            else
            {
                echo "С нашим xpath-выражением что-то не так." . PHP_EOL;
                $app->quit();
            }
        }
        else
        {
            echo "Нашли {$results->length} совпадений для '{$text}' на 1-й странице поисковой выдачи." . PHP_EOL;
        }
    

    Если всё хорошо и что-то нашлось, то у нас в $results будет N сущностей с результатами отработки xpath-запроса.

    Каждая сущность будет содержать такой HTML-код

      
    

    Теперь можно приступить непосредственно к выборке интересующих нас данных.

    foreach($results as $num => $item)
        {
            // В $item у нас сущность с одним результатом из поисковой выдачи
        }
    

    Получаем номер в поисковой выдаче.

    echo "Номер в поисковой выдаче: " . ($num + 1) . PHP_EOL;
    

    Получаем заголовок.

    $title = $xpath->query("div[contains(@class, \"title\")]/h2/a", $item);
        if($title === false or $title->length !== 1)
        {
            echo "С нашим xpath-выражением что-то не так." . PHP_EOL;
            $app->quit();
        }
        $title = utf8_decode($title->item(0)->textContent);
        echo "Заголовок: '{$title}'" . PHP_EOL;
    

    В данном случае мы в метод «query» передали вторым параметром текущий $item и в xpath-запросе не указывали «//» (т.е. искать сначала страницы).

    2-й параметр означает контекст поиска для xpath-запроса, т.е. искать будем не по всей странице, а только по маленькому html-кусочку из $item.
    И, наконец-то, получаем ссылку.

    $link = $xpath->query("div[contains(@class, \"title\")]/h2/a", $item);
        if($link === false or $link->length !== 1)
        {
            echo "С нашим xpath-выражением что-то не так." . PHP_EOL;
            $app->quit();
        }
        $link = $link->item(0)->getAttribute("href");
        echo "Ссылка: '{$link}'" . PHP_EOL;
    

    Вообще-то, ссылку можно было получить и без совершения дополнительного xpath-запроса, использовав результат из поиска заголовка.
    Но оставим так, для наглядности.

        // Получаем заголовок и ссылку
        //
        $title_link = $xpath->query("div[contains(@class, \"title\")]/h2/a", $item);
        if($title_link === false or $title_link->length !== 1)
        {
            echo "С нашим xpath-выражением что-то не так." . PHP_EOL;
            $app->quit();
        }
        $title = utf8_decode($title_link->item(0)->textContent);
        echo "Заголовок: '{$title}'" . PHP_EOL;
        $link = $title_link->item(0)->getAttribute("href");
        echo "Ссылка: '{$link}'" . PHP_EOL;
    

    Полезные ссылки:

    Wikipedia XPatch
    Wikipedia Rugular expression
    W3.org XPatch
    W3schools XPatch
    Mozilla.org XPatch
    PHP.net
    Ibm.com x-xpatch
    Ibm.com x-xpatchphp

    Скрипт написан 28.04.2015 в Human Emulator 4.9.18 Advanced.

    скачать скрипт

    Публикация постов на стену facebook.com с помощью Human Emulator

    Это видео демонстрирует как работает скрипт для Human Emulator, который автоматически публикует записи с картинками на стену в Фейсбуке (facebook).

    Сайт программы

    Присоединяйтесь к нам в ВК:
    https://vk.com/humanemulator
    https://vk.com/xscripts
    https://vk.com/club130582676

    автоматизация социальных сейтей с помощью Human Emulator

    Как удалить «собачек» из группы вконтакте, используя Human Emulator

    Многие пользователи, которые имеют свои группы в Вконтакте, задаются вопросом «Нужно ли удалять собачек из группы вконтакте?». Те кто имеет опыт продвижения групп и сообществ в Вконтакте прекрасно знают, что наличие так называемых «собачек», то есть заблокированных или удалённых пользователей влияет на продвижение группы.

    Откуда берутся «собчачки»? Администрация ВК борется с накрутками групп и сообществ, которую часто осуществляют с использованием, так называемых ботов. Бот — это фейковый аккаунт, который управляется программой. Вот эти, попавшие под санкции аккаунты и превращаются в «собачек», или пользователи, которые удалили свои страницы, так же становятся «собачками». И в первом и во втором случае это мёртвые аккаунты и если у Вас в группе много таких участников, то у реальных людей появятся сомнения вступать в такую группу. Та и ВКонтакте не очень жалует сообщества с «мёртвыми» подписчиками. В итоге ваша группа умирает.

    Для того что бы этого не случилось нужно регулярно чистить свои группы. Хорошо если у Вас маленькая группа с небольшим количеством участников, то Вы легко справитесь и руками. Если же у Вас много больших групп и к тому же, до этого Вы не сильно задумывались об избавлении от «собачек», и в один прекрасный момент обнаружили в своих группах сотни заблокированных пользователей, тут руки уже Вам не помогут. Тут Вам поможет Human Emulator.

    Наш скрипт работает следующим образом: в настройках скрипта Вы указываете аккаунт, под которым нужно войти в группу и начать её чистить и саму группу,
    которую будем чистить от «собачек».

    Настройки скрипта:

    // логин
    $vk_login = "";
    // пароль
    $vk_pwd ="";
    // группа для чистки
    $vk_group_id="";
    

    Сам скрипт выглядит следующим образом:

    
    

    Видеоролик как работает скрипт удаления «собачек» из группы ВКонтакте

     

    Данный скрипт будет работа и в Demo Human Emulator. Единственное,
    что Вам придётся открыть Human Emulator и залогиниться в ВКонтакте руками, после чего запустить скрипт на выполнение.

    Скрипт написан для Human Emulator 4.9.38 и выше.

    скачать скрипт

    автоматизация социальных сейтей с помощью Human Emulator

    Скрипт Human Emulator автоматического постинга в твиттер

    Многие из нас ведут активную социальную жизнь и имеют аккаунты сразу в нескольких социальных сетях. При этом стараясь держать все свои акаунты в актуальном состоянии, что отнимает массу времени. Представляем вашему вниманию скрипт автоматической публикации сообщений в Twitter.

    Скрипт работает следующим образом: заходит в указанный аккаунт на твиттере. И из приготовленного вами файла публикует через определённый промежуток времени ваши сообщения.

    На входе скрипт принимает файл с сообщениями в формате:

    И всё чаще перед ними, как и перед простыми пользователями встают рутинные задачи.
    Многие задачи можно решить с помощью скриптов.
    Наимение затратный вариант это php-скрипты.
    … и т.д.

    Настройки скрипта:

    // данные аккаунта на твиттере
    $str_lg_tw="DmitriyDumanovs";
    $str_pass_tw="kuvxplscgQQ4110";
    // путь к файлу со всеми твитами
    $path_to_tws = "data/twits.txt";
    // ожидание между твитами в секундах
    $wt_min="10";
    $wt_max="15";
    

    Если у вас не один а несколько аккаунтов в твиттере, вы можете лекго подправить скрипт на работу с аккаунтами, которые будут браться из файла.

    Сам скрипт выглядит следующим образом:

    Видеоролик как работает скрипт автоматической публикации твиттов в twitter.com

    Скрипт написан 2.04.2013 в Human Emulator 4.6.5 Advanced.
    На момент публикации статьи 04.04.2013 скрипт был рабочий.

    скачать скрипт

    автоматизация социальных сейтей с помощью Human Emulator

    Скрипт для нажатия «like» заглавной фотографии аккаунта из поиска Вконтакте

    Скрипт для автоматического проставления «лайков» аватар пользователей страниц в Вконтакте по заданным параметрам поиска.

    В этой статье мы рассмотрим скрипт для автоматического лайканья аватар пользователей в Вконтакте, по заданным параметрам поиска. Начнем, как обычно с подготовительной части и настроек скрипта:

    Настройки скрипта:

    // скрипт работает в режим отладки
    $dbg = true;
    // логин и пароль для входа в ВК(необходимо заполнить)
    $login = "";
    $pass = "";
    // время ожидания
    $wt = 5;
    $wt_long = 10;
    // путь к необходимой группе(необходимо заполнить)
    $group = "";
    // количество лайков за один проход
    $likes = 3;
    // текущее количество лайков
    $cur_likes = 0;
    // путь к обработанным анкетам
    $path_to_ankets = "res\\ankets.txt";
    

    для начала пропишем создание дополнительной вкладки — в ней мы будем переходить по полученным линкам на профили пользователей ВК.

    // открыть дополнительную вкладку
    $browser->set_count(2);
    $browser->set_active_browser(0);
    sleep($wt);
    
    echo "Переходим на сайт ВК<br>";
    $browser->navigate("http://vk.com/");
    sleep($wt_long);
    
    echo "Авторизируемся<br>";
    $input->send_keyboard_input_by_name("email", $login);
    sleep($wt);
    $input->set_focus_by_name("pass");
    $input->send_keyboard_input_by_attribute("id","index_pass",true, "$pass");
    sleep($wt);
    echo "нажимаем кнопку Войти<br>";
    $btn->click_by_inner_text("Войти",false);
    $btn->click_by_name("index_login_button");
    sleep($wt_long);
    
    echo "Переходим в нужную нам группу<br>";
    $browser->navigate($group);
    sleep($wt_long);

    получим кол-во найденных людей (число, которое выдает поисковик ВК), оно нам понадобиться для прокрутки страницы.

    echo "начинаем прокручивать скролл вниз<br>";
    $all_of_member_old = 0;
    $cur_scroll = 0;
    while (true)
    {
    	// получаем номера на всех подписчиков
    	$arr_of_names = $div->get_all_inner_texts_by_attribute("class", "labeled name", true);
    	$all_of_member = count($arr_of_names);
    
    	echo $all_of_member . "<br>";
    	if ($all_of_member_old == $all_of_member)
    	{
    		$cur_scroll++;
    	}	
    	else 
    	{
    		$cur_scroll = 0;
    	}
    
    	if ($cur_scroll >= 10)
    	{
    		echo "если количество подгруженных анкет такое же как и в предыдущий раз<br>";
    		echo "уже 10 циклов в подряд, то скорее всего мы дошли до конца страницы<br>";
    		break;
    	}
    	$all_of_member_old = $all_of_member;
    	
    	if ($all_of_member > 200)
    	{
    		echo "Количество подписчиков более 200<br>";
    		break;
    	}
    	echo "прокручиваем колесо<br>";
    	$mouse->wheel(-rand(14, 24), $window_width/2, $window_height/2);
    	sleep(4);
    }
    

    т.е. получаем линк по имени пользователя с главной, переходим по линку в доп. вкладке, затем возвращаемся на главную и так по всем найденным страницам!

    В итоге вся логика скрипта состоит из 9 пунктов:
    1) переходим на сайт и авторизируемся;
    2) переходим на нужную группу;
    3) получаем всех пользователей группы;
    4) получаем всех пользователей группы в «online»;
    5) прокручиваем страницу вниз для максимальной прогрузки данных о найденных контактах (не более 1000);
    7) получаем по каждому контакту ссылку на профиль;
    8) используя дополнительную вкладку переходим по полученным линкам на аккаунт пользователя;
    9) после перехода на страницу пользователя — кликаем по аватару и ставим лайк.

    Примечания:
    1. Анкеты которые «лайкались» ранее повторно не используются. При использовании анкеты, уникальный путь к ней сохраняется в папке res/ankets.txt. Соответственно если повторно эта анкета встречается в другой группе или же скрипт повторно запускается для этой же группы он предварительно проверяет лайкали ли мы ранее эту анкету. Если да, то пропускаем ее и идем далее;
    2. Бываем что группа маленькая и количество онлайн-пользователей на данный момент менее 1000 — скрипт анализирует если количество подгруженных пользователей не изменно 10 скролов — вероятнее всего мы дошли до низа списка и подгрузили всех пользователей группы находящихся в режиме «online». Производится выход и скрипт переходит к следующему шагу — «лайкам» фотографий.

    Видео работы скрипта автоматического нажатия «like» Вконтакте

    Скрипт написан 06.12.2018 и оптимизирован под версию 7.0.26

    скачать скрипт

    автоматизация социальных сейтей с помощью Human Emulator

    Скрипт для Human Emulator автоматического добавления друзей в ВКонтакте

    Предлагаем Вашему вниманию новый скрипт из категории автоматизация социальных сетей. В этой категории вы найдёте полезные скрипты для работы с ВК и другими социальными сетями. К примеру: автоматическое нажатие кнопки «like» в Вконтакте или автоматическая публикация записей на стену в Вконтакте. Там же лежат видео примеры как это работает.

    Это скрипт автоматического добавления друзей в социальной сети Вконтакте.

    Скрипт работает следующим образом: Вы указываете ему группу или сообщество и скрипт проходит по всем подписчикам и приглашает их в друзья. В связи с изменением политики в Вконтакте стали банятся аккаунты, которые активно добавляют друзей вступают в группы и т.д. Так же если Вы добавили кого-то в друзья и он на Вас пожаловался как на спам, то Ваш аккаунт временно блокируют, чем больше таких жалоб, тем дольше аккаунт будет заблокирован.

    Настройки скрипта:

    // //////////////////////// настройки скрипта /////////////////////////
    $dbg = true;
    // логин vk
    $login = "";
    // пароль vk
    $pass = "";
    // группа/страница c которой добавлять подписчиков
    $group = "http://vk.com/ru_searchengines";
    // кол-во добавляемых друзей  за один запуск скрипта
    $num_friends = 10;
    // кол-во добавленных друзей - счётчик 
    $i_friends = 0;
    // счётчик показанных капч
    $cur_k = 0;
    // максимальное кол-во ввода капчи - если vk выдаст капчу большее кол-во раз 
    // чем указанно в этой настройке скрипт остановится
    $max_k=3;
    // работаем в группе или в сообществе идентификатор - они отличаются поэтому 
    // нужно указать группа это или сообщество
    $b_group=false;
    // ключ для капчи - для разгадывания капч
     $apikey = "";
    // массив друзей
    $arr_friends =array();
    // ожидание перед следующем шагом
    $wt = 5;
    $wt_long = 10;
    // диапазон ожидания между добавлениями в друзья
    $wt1=30;
    $wt_long1=60;
    
    // выйти из аккаунта - по завершению 
    $b_exit=false;
    
    // файл куда сохраняем последнее кол-во элементов в массиве
    // для одной группы - что бы при следующем запуске не начинать сначала
    // а с того места где остановились в прошлый запуск скрипта
    $cnt_accs="data/cnt.txt";
    

    Сам скрипт выглядит следующим образом:

    
    

    Скрипт написан для Human Emulator 4.6.39 и выше.

    скачать скрипт