![](https://habrastorage.org/getpro/habr/post_images/a06/5c4/e5e/a065c4e5e1a6a547c53731b8bc815aab.png)
Опять соц. сети?
Я хочу поделится с хабрасообществом своим нехитрым решением отложенного постинга VK. Да, я тоже скептически относился к рекламе в соц. сетях, но ведь глупо не попробовать. Ежедневная посещаемость этого ресурса сравнима yandex.ru (пруф1 пруф2), не говоря уже про то, что это просто наилучшее место для “направленной” рекламы.
Небольшое справка.
Моя группа посвящена Стимпанку и Дизельпанку, на базе которой, потом, мы с моей невестой будем создавать фотоателье с прокатом костюмов сделанных вручную. Новостной сайт по данной тематике (Стим, Дизель, Викторианская эпоха) сейчас находится еще в стадии разработки. Все тянем своими силами.
И так допустим, что вы тоже выбрали Вконтакте и в качестве рекламной платформы уже используете страницу/группу и действительно хотите, чтобы ваши посты просмотрело наибольшее количество народу. Какое самое удачное время для этого? Должно быть это прайм тайм. Только думаю, что опытные блогеры и “админы” популярных сообществ поспорили бы с этим утверждением, так что жду комментариев.
Главное, что какое бы время не являлось наиболее “хлебным”, необязательно проводить его сидя за компьютером. Ведь все мы знаем, что жизнь коротка, ну и блаблабла…
А мой сервис лучше
Вопрос: А мой сервис лучше *service name, почему не использовать его?
Ответ: Ты молодец *habrauser, что нашел свое решение и написал столь ценный комментарий.
Вдвойне молодец, если оставил исходник. И да, есть много сервисов хороших, платный и бесплатных, которые справляются с этой достаточно тривиальной задачей на ура.
Я ведь не говорю, что мое решение единственное, лучшее или то, что оно, не дай Кришна, идеальное
Ответ: Ты молодец *habrauser, что нашел свое решение и написал столь ценный комментарий.
Вдвойне молодец, если оставил исходник. И да, есть много сервисов хороших, платный и бесплатных, которые справляются с этой достаточно тривиальной задачей на ура.
Я ведь не говорю, что мое решение единственное, лучшее или то, что оно, не дай Кришна, идеальное
Подходим к сути
Что собой представляет xStarter справка с офф. сайта:
xStarter автоматизирует выполнение повседневных задач по планировщику или событиям системы.
На самом же деле, эта программа создана для таких бездарей как я. С самого детства смотрящего на любого программиста, как на человека обладающего магической силой, естественно одетого в остроконечную шляпу и с посохом на перевес идущего спасать какое-нибудь свой Эндор. Взгляд этот затуманен. Даже нет, он отравлен безграничной горечью и завистью. Я почти серьезно.
xStarter способен автоматизировать сотни различных задач, которые вы совершаете в Windows ежедневно. Например: запуск команд по расписанию, программ, нажатие клавиш и мыши по координатам, отслеживание изменений в файловой системе и тому подобное. По сути, мы здесь сталкиваемся с очень продвинутым макрос-редактором. Стоит ли говорить, на сколько это экономит время? Разработчик утверждает, что аж в 30%. Хм… Ну вполне может быть.
А как же *nix?
Вопрос: А nix?
Ответ: К сожалению нет, не нашел аналога. Подскажите, буду признателен
Ответ: К сожалению нет, не нашел аналога. Подскажите, буду признателен
Почему не AutoIT?
Вопрос: Почему xStarter лучше, чем AutoIT или *мой любимый язык программирования.
Ответ: Бритва оккама. Не нашел более простого для себя способа, с учетом, что в своей жизни ни строчки кода не написал. Однако пока я разрабатывал данный метод, то решил в дальнейшем обязательно заняться изучением чего-нибудь серьезного. Надеюсь, что в той-же мере это может подтолкнуть и других далеких от программирования людей, которые дочитают этот пост до конца и попробуют сделать что-нибудь свое.
К тому же, в отличии от AutoIT, xStarter имеет чертовски удобный интерфейс для написания собственных скриптов.
Самое главное, в нем можно начать сразу работать, при этом лишь изредка вспоминать, что можно иногда и справку открыть. Интересно и то, что упоминания об xStarter на Хабре встречаются довольно редко.
Ответ: Бритва оккама. Не нашел более простого для себя способа, с учетом, что в своей жизни ни строчки кода не написал. Однако пока я разрабатывал данный метод, то решил в дальнейшем обязательно заняться изучением чего-нибудь серьезного. Надеюсь, что в той-же мере это может подтолкнуть и других далеких от программирования людей, которые дочитают этот пост до конца и попробуют сделать что-нибудь свое.
![](https://habrastorage.org/getpro/habr/post_images/989/135/f3c/989135f3cd5044d06c978fe113a54e64.png)
Самое главное, в нем можно начать сразу работать, при этом лишь изредка вспоминать, что можно иногда и справку открыть. Интересно и то, что упоминания об xStarter на Хабре встречаются довольно редко.
Не будем долго и нудно изучать интерфейс программы, а лучше непосредственно перейдем к самому построению задачи. Уже там, шаг за шагом, мы рассмотрим каждое из действий и как они работают.
Предварительно: я создал несколько директорий, каждая из которых является названием раздела группы. К примеру, на C:\VK\Post\ находятся 7 поддиректорий: Art, Boys, Girls, CG, Modding, Photo, Transport.
Внутри этих 7-ми директорий также несколько поддиректорий, каждая из которых уже является самим постом.
Пост должен быть такого вида – несколько изображений и один *.txt файл со статьей.
Вот, для наглядности я набросал схему:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/d8d/1f0/157/d8d1f01578fde02f2de92fd7b310d8fe.png)
Теперь отпетросяновшись вдоволь, мы продолжаем
![](https://habrastorage.org/getpro/habr/post_images/d8d/1f0/157/d8d1f01578fde02f2de92fd7b310d8fe.png)
Теперь отпетросяновшись вдоволь, мы продолжаем
Понеслась. Открываем xStarter и создаем новую задачу
Сразу прикидываем, в какое именно время она будет выполнятся. Допустим, укажем, чтобы задача запускалась по расписанию, эдак раз в пол часа. Зачем так мудрить с расписанием спросите вы? Да, можно просто поставить 30 минутный интервал выполнения, но только с помощью расписания можно запускать обновление нескольких категорий группы в рамках одной задачи.
Заводим себе три переменные:
SerVariable1 browser = путь к веб-браузеру для дальнейшего запуска.
SerVariable2 VKFolders = путь к категориям Вконтакта на локальном диске
SerVariable3 groudID = ссылка на группу
Это не обязательно, но так легче будет разобрать некоторые моменты, а вам проще будет поменять их на свои:
Скрин![](https://habrastorage.org/r/w1560/getpro/habr/post_images/702/b44/f3e/702b44f3e792ac043135480cc501c6e1.png)
![](https://habrastorage.org/getpro/habr/post_images/702/b44/f3e/702b44f3e792ac043135480cc501c6e1.png)
Запускаем браузер:
RunProcess1 Run = [browser] в параметрах пишем --start-maximized [groudID]
Скрин![](https://habrastorage.org/r/w1560/getpro/habr/post_images/e31/ed9/83b/e31ed983bc44862b32a1b806695e056c.png)
![](https://habrastorage.org/getpro/habr/post_images/e31/ed9/83b/e31ed983bc44862b32a1b806695e056c.png)
Создаем новое действие GetTextBlockN и указываем название категорий. Учитываем и то, что название раздела будет взято из строки под номером, который совпадает с часом запуска задачи. Проще говоря, если автоматическое время запуска 18:00 или 18:40, то будет возвращена 18-я строка.
GetTextBlockN1 Num = [HOUR] (текущий час).
Скрин![](https://habrastorage.org/r/w1560/getpro/habr/post_images/786/a42/416/786a42416d9ca1d89aa0c6ef0d9170e5.png)
![](https://habrastorage.org/getpro/habr/post_images/786/a42/416/786a42416d9ca1d89aa0c6ef0d9170e5.png)
Пускай новости для публикации будут выбираться случайным образом, а для этого необходимо указать следующие:
SearchFolders1 Dir = [VKfolders]\[GetTextBlockN1.TextBlock]
Это поиск директории внутри раздела, который выдал GetTextBlockN1.
Random1 Min = “1", Max = "[SearchFolders1.Count]"
Cброс случайного числа, между 1 до общее количество найденных директории в разделе.
GetTextBlockN2 Text = "[SearchFolders1.DirNames]", Num = "[Random1.Random]"
Возвращает рандомную строку из списка директорий в SearchFolders1
Скрин![](https://habrastorage.org/r/w1560/getpro/habr/post_images/a6a/18f/5a0/a6a18f5a0082bb4cec44347d25ab763a.png)
![](https://habrastorage.org/getpro/habr/post_images/a6a/18f/5a0/a6a18f5a0082bb4cec44347d25ab763a.png)
Опять же это не обязательно, но чтобы нам было проще, мы из полученных данных создадим еще одну переменную:
SerVariable4 New = [VKfolders]\[GetTextBlockN1.TextBlock]\[GetTextBlockN2.TextBlock]\
Скрин![](https://habrastorage.org/r/w1560/getpro/habr/post_images/06d/91e/d68/06d91ed68c399bf62d5967b85c5112d6.png)
![](https://habrastorage.org/getpro/habr/post_images/06d/91e/d68/06d91ed68c399bf62d5967b85c5112d6.png)
Используем новую переменную для поиска графических и текстовых файлов внутри директорий:
SearchFiles1 [New] по маске *.txt
Ищем *.txt файл с текстом для новости.
ReadFromLog1 Text = [SearchFiles1.Files]
Если таковой файл не будет найден, то ничего страшного, тогда будут опубликованы только изображения.
SearchFiles2 [New] по маске *.jpg;*.png
Это поиск изображений, аналогично SearchFiles1.
Скрин![](https://habrastorage.org/r/w1560/getpro/habr/post_images/943/e07/92a/943e0792a547b7ad3a74ee2b544c7600.png)
![](https://habrastorage.org/getpro/habr/post_images/943/e07/92a/943e0792a547b7ad3a74ee2b544c7600.png)
Создаем действие нажатия клавиш в браузере, для нового сообщения.
И да, для запуска Java консоли, потребуется расширение Web Developer (подходит для большинства браузеров, кроме IE)
Наверняка можно обойтись и одной командой, но если честно, я плохо знаю jquery, так что:
SendKey1
{DELAY 3000}^+(j){DELAY 1000}
$((«textarea##post_field.fl_l»)).focus(());{DELAY 300}
$((«span.add_media_lnk»)).click(());{DELAY 300}
$((«a.add_media_type_1_photo.add_media_item»)).click(());
{DELAY 300}
Скрин![](https://habrastorage.org/r/w1560/getpro/habr/post_images/c53/d0a/3e7/c53d0a3e7d321734d11b110885c9af4e.png)
![](https://habrastorage.org/getpro/habr/post_images/c53/d0a/3e7/c53d0a3e7d321734d11b110885c9af4e.png)
Самый известный на земле Кэп, просит пояснить, что {DELAY} является паузой в мс. Соответственно, в зависимости от загруженности браузера, скорости канала и всего прочего, возможно вам придется искать свои оптимальные значения. У меня все работает на двух совершенно разных конфигурациях.
Опять же из за незнания основ jquery, в нашем море есть еще небольшой костыль. Для запуска диалога загрузки файлов, необходимо добавить нажатие левой кнопки мыши по элементу на самом сайте. Простите, ребят.
![](https://habrastorage.org/getpro/habr/post_images/f72/39d/e0e/f7239de0e0a6b11f3a33cd7f735f7b0d.png)
MouseMove1
Нужные координаты можно получить в самой задаче, просто ткнув курсором в необходимое пространство.
MouseClick1
Координаты для разрешения 1920 на 1080 примерно такие:
Скрин![](https://habrastorage.org/r/w1560/getpro/habr/post_images/8d6/b39/d55/8d6b39d552f0e6b588e692fc6a1fdc49.png)
![](https://habrastorage.org/getpro/habr/post_images/8d6/b39/d55/8d6b39d552f0e6b588e692fc6a1fdc49.png)
Далее, переход в рандомную директорию с новостью:
SendKey2
{DELAY 1000}[New]
{DELAY 100}{ENTER}
Скрин![](https://habrastorage.org/r/w1560/getpro/habr/post_images/793/9ce/7ca/7939ce7cacff0d59e2325792dd075058.png)
![](https://habrastorage.org/getpro/habr/post_images/793/9ce/7ca/7939ce7cacff0d59e2325792dd075058.png)
Теперь нужно привести список файлов с графикой в божеский вид:
ReplaceText1 [SearchFiles2.Files]
C:\ заменяем на "C:\
ReplaceText2 [ReplaceText1.ResultText]
.jpg на .jpg"
ReplaceText3 [ReplaceText2.ResultText]
.png в .png"
ReplaceText4 [ReplaceText3.ResultText]
Удаляем путь к файлу
[New] на
ReplaceText5 [ReplaceText4.ResultText]
“
” заменяем на “ “
Скрин![](https://habrastorage.org/r/w1560/getpro/habr/post_images/5d3/446/d31/5d3446d31e6645c25eee963ca4fccc4a.png)
![](https://habrastorage.org/getpro/habr/post_images/5d3/446/d31/5d3446d31e6645c25eee963ca4fccc4a.png)
Полученный список файлов такого формата: “file1.jpg” “file2.png” “file3.jpg” — мы скармливаем браузеру для выгрузки файлов:
SendKey3 [ReplaceText5.ResultText]{DELAY 1000}{ENTER}{DELAY 1000}
Скрин![](https://habrastorage.org/r/w1560/getpro/habr/post_images/606/543/418/606543418f5650a464aa7df3453145bb.png)
![](https://habrastorage.org/getpro/habr/post_images/606/543/418/606543418f5650a464aa7df3453145bb.png)
Кликаем на окно для создания нового сообщения:
MouseMove2
Ищите собственные координаты.
Mouse Click2
Скрин![](https://habrastorage.org/r/w1560/getpro/habr/post_images/473/bee/597/473bee597e0760f550affffb1e6d55f8.png)
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/c22/ed8/2ff/c22ed82ffc744595a563e272da10dcb2.png)
![](https://habrastorage.org/getpro/habr/post_images/473/bee/597/473bee597e0760f550affffb1e6d55f8.png)
![](https://habrastorage.org/getpro/habr/post_images/c22/ed8/2ff/c22ed82ffc744595a563e272da10dcb2.png)
Отправляем текст в диалоговое окно:
SendKey4 {DELAY 500}##Tag ##Tag[GetTextBlockN1.TextBlock]
[ReadFromLog1.Text]{DELAY 1000}^({ENTER}){DELAY 2000}^(w)
Первая строка, это тэги. Например, я использую #стимпанк и #Steam(меняется в зависимости от расписания).
Вторая, это текст, который находился в *.txt. Третья – отправить сообщение и через две секунды закрыт вкладку браузера.
Скрин![](https://habrastorage.org/r/w1560/getpro/habr/post_images/86c/047/c62/86c047c62c3005181764796b6e950b78.png)
![](https://habrastorage.org/getpro/habr/post_images/86c/047/c62/86c047c62c3005181764796b6e950b78.png)
Ну и наконец, удаляем и перемещаем использованные файлы:
Move1 [SearchFiles2.Files] в C:\VK\done\[GetTextBlockN1.TextBlock]\
Delete1 [SearchFiles1.Files]
Скрин![](https://habrastorage.org/r/w1560/getpro/habr/post_images/7f8/5e5/9ee/7f85e59ee244745ae1d87a16d81aa2f3.png)
![](https://habrastorage.org/getpro/habr/post_images/7f8/5e5/9ee/7f85e59ee244745ae1d87a16d81aa2f3.png)
Можете посмотреть в моей группе, что из этого получается в итоге.
Еще рекомендую, после создания переменных добавить действие на удаление пустых директорий.
Иногда Chrome “держит” explorer и не позволяет этого сделать:
DeleteEmptyFolders [VKfolders]\
Я ничего не понял, дайте мне поковырять готовое
И вот такие дела народ.
Конечно с первого взгляда это может показаться сложным, но вы можете взять уже готовый скрипт и доработать его.
Так, а что еще можно сделать, для того, чтобы еще улучшить эту задачу?
Проще всего создать тоже самое задание, но только добавить возможность при запуске выбирать раздел для публикации. Или например, можно прикрепить к изображениям уникальные водяные знаки. Добавить проверку, из серии – не пора ли раздел пополнять?
С различными способами уведомления. Можно даже запускать задачу не по расписанию, а с помощью SMS (при наличии GSM модема).
В рамках остального — можно создать задачи для автоматической загрузки mp3 файлов, с публикацией. Можно даже использовать xStarter для раскрутки самой группы.
В общем, если всемогущие НЛО примет эту статью на ура, то обязательно ждите новых. Спасибо за внимание!
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Ждете продолжения?
28.36% Ждем38
50.75% Не ждем68
32.84% Ненавижу Дурова44
Проголосовали 134 пользователя. Воздержались 69 пользователей.