Adsense Cleaner - блокировщик плохих объявлений на Python + Selenium
Программа Adsense Cleaner была создана для помощи моему хорошему знакомому, которого по его словам уже достала каждодневная ручная чистка десятков мошеннических объявлений в центре модерации партнерского интерфейса Google AdSense.
Для создания Adsense Cleaner я использовал скриптовый язык программирования Python, библиотеку автоматизации браузеров Selenium, а в качестве браузера выбрал Firefox.
Используя составленные списки стоп-слов и RegExp программа автоматически выполняет аудит свежих объявлений, а также ищет плохие объявления по отдельному собранному списку плохих слов и фраз. Плохое объявление блокируется, также при необходимости блокируется связанный с ним аккаунт AdWords.
Программа предназначена для работы в операционных системах GNU/Linux. Также скрипт автоматизации можно запустить на VPS или в LXC-контейнерах.
Для запуска под Microsoft Windows используйте виртуальную машину (например VirtualBox, VMWare) с установленной в ней гостевой системой GNU/Linux.
Содержание статьи:
- Предыстория, причины, последствия
- Что с этим всем делает Google?
- Как избавляться от плохих объявлений
- Описание работы, системные требования
- Программа и ее исходный код
- Установка
- Решение некоторых проблем при запуске
- Настройка программы и списки для блокировки
- В завершение
Предыстория, причины, последствия
Для написания этой программы мне пришлось плотно поработать с веб-интерфейсом Google AdSense, проанализировать объявления как на сайтах, так и в интерфейсе партнерской программы, разобраться в том что же они из себя представляют и как загружаются.
Чтобы было понятнее о чем будет идти речь, вы можете ознакомиться с примерами таких объявлений в темах для обсуждения на нескольких SEO-форумах:
- searchengines.guru - Список заблокированных URL-адресов в Adsense
- maultalk.com - Блокировка сомнительных объявлений в AdSense
Чего только не используют мошенники (далее просто МШ) из рядов вебмастеров-арбитражников чтобы побудить посетителя на клик по фейк-объявлению:
- фальшивые новости;
- информацию о том, что с каким-то человеком что-то случилось (например смерть или болезнь);
- лживые уведомления о том что "император" повысит/отменит пенсию, поднимет зарплаты;
- предложения посмотреть видео с п#Pно;
- лживые рекомендации по мужскому здоровью, оздоровлению больных и старых;
- и т.п.
Желая зла другим - получишь это же многократно приумноженное зло к себе обратно, и никакие заработанные на этом виртуальные или реальные ценности не спасут от последствий...
Насколько же подлыми, бессовестными и бескультурными нужно быть, чтобы плодить такие объявления... ведь не понимая того сами призывают к себе беду (и даже к своим близким), творя себе карму.
Видать, таков сейчас выбор этих невежд. :(
Каким же образом плохие объявления попадают в рекламную сеть Google, а потом отображаются на сайтах? - все выглядит примерно вот так:
- Новоприбывшему в "армию" МШ попадается в руки (просто так или за деньги) мануал/информация по сливу трафика из сети Google Adwords. Например подобное можно встретить на каком-то форуме о сером/черном SEO;
- МШ начинает процесс массовой регистрации или покупки фейковых (по сути одноразовых) аккаунтов Google Adwords.
- Для обхода антифрод (antifraud) систем от Google используются различные "супер-браузеры" - по сути это песочницы, специально переписанные браузеры или браузеры в виртуальных машинах, так называемые "антидетекты". Это платные продукты с закрытым исходным кодом, которые не исключено что могут содержать бекдоры, стиллеры и прочие сюрпризы. Таким образом МШ, зарабатывая на купонах Adwords, могут сами того не понимая сливать свою персональную информацию и доступ к ПК другим МШ (которые написали антидетект)...но это уже другая не менее интересная история;
- Для пополнения баланса рекламного кабинета в Adwords могут использоваться деньги, полученные каким-то легким мошенническим путем, или же бонусные купоны системы Adwords, добытые также в массовом количестве и потом привязанные к фейковым аккаунтам рекламной системы;
- МШ готовит сайт-прокладку с настроенной системой дистрибуции трафика или же простыми редиректами 301. Для этого часто используются бесплатные площадки (например Тильда, Блогспот и т.п.), также это может быть выделенный сервер с установленной и настроенной TDS (Traffic Distribution System) и привязкой к множеству доменов-однодневок;
- МШ создает рекламную кампанию в фейковом аккаунте рекламной сети, в качестве адреса сайта указывает какой-то из доменов-однодневок, на котором создан казалось бы безобидный тематический сайт, но так он отображается только для системы Adwords и на период модерации (в теме арбитража трафика это называют "клоакингом", сокрытием);
- Система Adwords в автоматическом режиме переходит на этот сайт и проверяет его содержимое, система на домене-однодневке выдает безобидный контент на период модерации или определив что на сайт зашел робот от Google (например по строке UserAgent). Таким образом объявление проходит модерацию;
- Пользователь, кликнув на это объявление от МШ, что отображено на каком-то из сайтов участвующем в партнерской сети Google AdSense, увидит уже не тот контент что прошел модерацию, а совсем другой или же будет перенаправлен на другой сайт с каким-то мошенническим предложением. Для этого используются возможности TDS.
Это лишь один из алгоритмов работы МШ в этой теме, есть и другие мутации.
Чем вредны такие объявления от мошенников? - целым рядом проблем для сайта и его владельца, для посетителей и даже самой компании Google:
- За наличие подобных мошеннических объявлений на сайте он может получить фильтр или же другие санкции от Яндекса или Гугла (это не опечатка, компания может наказать за мошеннический контент, который фактически попал к вам из ее же сети);
- Подобные объявления на сайте могут в прямом смысле распугать/разогнать от ваших проектов всех прямых рекламодателей, если они вдруг увидят какой треш от МШ у вас там отображается рядом с их оплаченными баннерами;
- Такие объявления от МШ несут вред людям - обманывая их, выкачивая деньги и давая фальшивые надежды/обещания;
- Испорченная репутация сайтов-доноров рекламы, а также платформы Youtube (ведь там также отображается гадость от МШ в виде рекламных блоков и вставок).
Что с этим всем делает Google?
Что же делает компания Google в борьбе с этой напастью, спросите вы? - что-то там делают...и уже много лет (начиная где-то с 2012 !).
Мы с коллегой уже несколько раз обращались в техподдержку Adsense и Adwords по поводу этого беспорядка. На первые обращения получали шаблонные ответы с советами, которые дают понять что текст письма даже никто и не пробовал читать (ну, кроме робота).
Потом наконец-то ответил живой представитель службы тех-поддержки, извинился за то что приходится сталкиваться с этим рекламным мусором, сказал что о проблеме знают и делают все возможное. Прошло уже более 2х лет...проблема как существовала, так и продолжала существовать.
В интерфейсе Google Adsense для партнеров было сделано несколько редизайнов, добавлены некоторые возможности и удобства в центре просмотра объявлений.
Да, стало немножко удобнее искать и блокировать мусор вручную, но все же это как и раньше было практически бесполезно, особенно если нужно прогнать все объявления по списку из 100-500 стоп-слов.
Сидеть весь день напролет и вбивать руками стоп слова - это адский труд, к тому же практически малополезный, поскольку новые объявления от МШ могут появиться уже на второй час и все нужно повторять сначала, не закончив при этом еще и предыдущий проход.
Некоторый прогресс в решении проблемы можно было наблюдать лишь со второй половины 2019-го года: была добавлена возможность отправить жалобу на любое из объявлений, также немного ужесточился процесс регистрации новых аккаунтов Adwords. Были закрыты некоторые "дыры" в системе, которые позволяли МШ практически бесконтрольно со стороны партнерской сети плодить мусорные объявления в огромных масштабах.
Как видим, спустя столько лет, в компании все таки приняли хоть некоторые меры, количество мошеннических объявлений немножко уменьшилось, но сказать что с проблемой разобрались - пока что никак нельзя.
В рекламном интерфейсе Adsense каждый день появляются новые вариации вредоносных объявлений от МШ, для маскировки в ход идут различные символы из кодировки UTF-8, пробелы между символами, манипуляции словами и многое другое.
Из вариантов решения проблемы можно выделить пожалуй два:
- Полный отказ от использования Google Adsense. Согласитесь, это не лучший вариант, но судя по отзывам в сети, все же некоторое количество пользователей, беспокоящихся за репутацию своих проектов, сделало такой не простой выбор;
- Создание продуманной системы автоматизации чистки объявлений самостоятельно или на заказ.
К большому сожалению, компанией цифровым-гигантом за столько лет так и не было предоставлено никакого действительно эффективного решения, которое бы позволило избавиться от поделок МШ в рекламной выдаче на сайтах.
Почему так? - сложность реализации, постоянная мутация методов МШ, ну и деньги...
Как избавляться от плохих объявлений
Из того, о чем отписались в тех-поддержке, можно выделить рекомендацию по ручному отлову мошеннических объявлений на самом сайте с их последующим добавлением в форму для рассмотрения модераторами AdWords: https://support.google.com/adwords/contact/feedback
К тому же, в новом центре просмотра объявлений уже появился функционал, позволяющий отправить жалобу на любой из просматриваемых юнитов прямо из иинтерфейса системы.
Желательно каждые 3-4 часа заходить в центр просмотра объявлений Adsense и проверять хотя-бы самые первые 100-200 объявлений в категории по количеству показов.
Среди них всплывает тот мусор, который нужно блокировать как по юнитам, так и вместе с привязанными к ним Adwords-аккаунтами, попутно собирая новые стоп-слова и возможные стоп-домены из плохих юнитов.
Собрав хороший список актуальных на данный день/неделю/месяц стоп-слов, нужно выполнять поиск по ним среди всех объявлений и безжалостно блокировать, заодно отправляя жалобы на эти юниты.
Согласитесь, это не простая задача, требующая большого количества времени и сил.
По большей части, помочь в этом рутинном деле может небольшая самописная программа автоматизации, о которой я сейчас подробно расскажу.
Предлагаемая версия программы уже многократно переработана, показала себя с хорошей стороны на протяжении нескольких лет борьбы с проблемными объявлениями. Помогла сэкономить колоссальное количество времени, нервов и здоровья.
Описание работы, системные требования
Основные возможности и особенности:
- Аудит объявлений в категориях 'Reviewed' и 'Unreviewed' + глобальный поиск по словам и фразам;
- Возможно установить порядок выполнения задач, списки фраз со стоп-словами и доменами, параметры;
- Поддержка регулярных выражений (Regular Expressions) в списках стоп слов и стоп-доменов;
- Сбор стоп-слов, на которые попались плохие объявления при аудите категорий 'Reviewed' и 'Unreviewed' и использование их в приоритете при глобальном поиске по всем объявлениям;
- Безопасный глобальный поиск по словам и фразам. Проверка содержимого найденных юнитов на предмет наличия в них тех самых стоп-слов и фраз. В случае глюков интерфейса Adsense (что случается не редко) это убережет от массового блокирования нормальных объявлений, не касающихся искомого слова или фразы;
- Написано на Python 3;
- Поддержка свежих версий Firefox;
- Возможность задать специальные опции для Firefox (как во вкладке about:config);
- Поддержка работы через Socks5 Proxy;
- Возможность задать нужные размеры окна браузера;
- Поддержка виртуального дисплея (Virtual Display) для запуска в консольном режиме. Пригодится при развертывании на VPS или в LXC;
- Улучшенная система логирования событий и данных: основной лог, лог сессии, лог заблокированных объявлений;
- Опция тестового режима (объявления не блокируются, эмуляция);
- Система отлова глюков интерфейса (GUI's glitch detector) с последующими попытками исправления ситуации для продолжения работы;
- Возможность приостановки работы скрипта во время запуска. Пригодится для автоматической авторизации с последующей ручной работой в интерфейсе рекламной системы;
- Подпрограмма для тестирования текстов на предмет попадания в черные списки стоп-слов и стоп-доменов (вызывается с меню, во время остановки работы скрипта при старте). Пригодится для составления регулярных выражений и прогона по существующей базе стоп-слов.
Порядок работы программы:
- Вывод параметров запуска в консоли;
- Загрузка страницы авторизации Google AdSense;
- Авторизация. Если логин или пароль не указаны в конфигурационном файле - запрос в консоли на ввод нужных данных;
- Выполнение задач по аудиту и поиску объявлений;
- Вывод статистических данных в консоли.
Список задач по аудиту и поиску объявлений:
- Аудит объявлений в категории "Unreviewed" (не просмотренные);
- Аудит объявлений в категории "Reviewed" (просмотренные);
- Глобальный поиск плохих объявлений по заданным ключевым словам и фразам.
Ниже привожу пример консольного вывода программы в процессе своей работы:
Рис. 1. Вывод информации программы AdSense Cleaner в консоли, в процессе поиска и блокировки мошеннических объявлений.
Для работы программы нужно:
- Компьютер или виртуальный сервер с 1-2 ядрами CPU и 2+ Гигабайтами ОЗУ, интернет-канал (минимум 3G);
- Операционная система GNU/Linux. Рекомендую Debian, также сойдет Ubuntu или какая-то десктопная сборка, например Linux Mint.
- Интерфейс Google AdSense переключенный на новый дизайн и с выбранной по умолчанию английской локалью (EN);
- Python версии 3+;
- Модули для Python: "idna", "pyvirtualdisplay", "selenium";
- Скачанный и распакованный дистрибутив веб-браузера Mozilla Firefox.
Программа и ее исходный код
Исходный код программы, все скрипты и ресурсы можно скачать в виде архива: 17 Кб. (новая версия скрипта - 2.2.0).
Насчет ранее размещенного репозитория скрипта на GitHub: вследствие покупки этого ранее отличного проекта известной мегакорпорацией, начавшихся банов репозиториев и истории с проектом youtube-dl... - удалил свой аккаунт, размещать свои репозитории там больше не планирую.
Программа написана на скриптовом языке Python, ее не нужно компилировать, аисходный код открыт для всех желающих ее изучить/дополнить/изменить.
Структура папок проекта:
/home/adsense
│
├── adscleaner
│ ├── adsense_cleaner.py
│ ├── data
│ │ ├── config.ini
│ │ ├── filter_block_and_account.txt
│ │ └── ...
│ ├── inc
│ │ ├── adsense.py
│ │ ├── firefox.py
│ │ ├── __init__.py
│ │ └── log.py
│ ├── logs
│ └── run.sh
└── firefox
├── firefox
├── ...
├── geckodriver
└── ...
Назначение:
- adsense_cleaner.py - основной файл программы, его нужно запускать на выполнение;
- run.sh - Shell-скрипт для запуска программы на VPS/VDS, а также в LXC. Выполняется уборка мусора и завершение оставшихся в памяти процессов Firefox, Xvfb;
- data - папка, содержащая файлы со списками стоп-слов и стоп-доменов, а также конфигурационные файлы;
- inc - компоненты, модули проекта;
- logs - здесь будут собираться логи работы программы, отчеты;
- firefox - папка, в которой будет содержаться дистрибутив браузера Mozilla Firefox.
ВНИМАНИЕ!
Если вы получили копию этой программы из другого сайта/форума/облака (а она вполне может разойтись по разным сайтам) или же вам кто-то прислал свою ссылку на скачивание "улучшенной версии", то вы должны понимать что ее вполне могли изменить для выполнения каких-то вредоносных целей, или же проще-простого - для кражи логина-пароля к AdSense.
Если вы все же скачали программу из стороннего источника то будьте предельно внимательны, не ленитесь проверить исходный код скриптов перед их использованием!
Используя программу AdSenseCleaner вы должны знать что:
- Программа не вносит никаких изменений и дополнений в программный код или части пользовательского интерфейса Google AdSense, она всего лишь автоматизирует ручные действия пользователя;
- Используя, изменяя и дополняя эту программу вы берете на себя всю ответственность за все возможные последствия;
- Я не обязываюсь дорабатывать и поддерживать данную программу под чьи-либо нужды, она поставляется в таком виде в котором есть. По возможности буду освежать программный код.
Я не несу никакой ответственности за возможные последствия использования вами данной программы, используйте с умом!
Установка
Ниже расписан процесс установки программы на компьютер или VPD/VDS с установленной операционной системой Ubuntu/Debian GNU/Linux. Также все описанное ниже подойдет для установки программы в LXC-контейнер.
В процессе будут установлены следующие версии программ и компонентов:
- Firefox 71.0;
- Geckodriver v.0.26;
- Python 3;
- Selenium 3.
Обновим репозитории пакетов, установим все необходимое ПО:
apt update
apt install cron libdbus-glib-1-2 libgtk-3-0 nano procps python3 python3-pip wget x11-utils xvfb
apt clean && apt autoclean
pip3 install idna pyvirtualdisplay selenium
Если установка будет вестись в LXC-контейнер или же на VPS (с типом виртуализации RVM) без файла подкачки, то нужно создать и настроить SWAP. Особенно это важно если размер оперативной памяти равен или ниже 2ГБ.
Создание и подключение файла подкачки в GNU/Linux:
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
Откроем для редактирования файл /etc/fstab:
nano /etc/fstab
Добавим в конец строку:
/swapfile swap swap defaults 0 0
Сохраняем файл и перезагружаем сервер. С файлом подкачки разобрались.
Теперь добавим в систему нового пользователя и перейдем под него:
adduser adsense
su adsense
Под новым пользователем создадим директорию для программы:
cd ~
mkdir adscleaner
Теперь вам нужно залить в эту директорию "/home/adsense/adscleaner" дерево файлов и каталогов программы из репозитория или архива.
Если установка ведется на удаленный сервер, то выполнить копирование файлов вы можете подключившись к нему по протоколу SCP (командой scp, файловым менеджером Krusader или из-под под Windows используя программу WinSCP), для авторизации используются данные доступа к SSH.
Теперь скачиваем Mozilla Firefox:
wget https://download-installer.cdn.mozilla.net/pub/firefox/releases/71.0/linux-x86_64/en-US/firefox-71.0.tar.bz2
wget https://download-installer.cdn.mozilla.net/pub/firefox/releases/71.0/linux-x86_64/en-US/firefox-71.0.tar.bz2.asc
Проверим целостность и подлинность скачанного архива, для этого используем GPG (GNU Privacy Guard). Импортируем ключ с публичного сервера и запустим проверку скачанных файлов:
gpg --keyserver pgp.key-server.io --recv-key BBBEBDBB24C6F355
gpg --verify firefox-71.0.tar.bz2.asc firefox-71.0.tar.bz2
Если в выводе видим следующую строчку, то значит все в порядке:
gpg: Good signature from "Mozilla Software Releases <release@mozilla.com>"
Теперь распакуем архив с Firefox и удалим ненужные (и даже мешающие) файлы:
tar -xf firefox-71.0.tar.bz2
rm firefox-71.0.tar.bz2.asc firefox-71.0.tar.bz2
rm firefox/crashreporter firefox/pingsender firefox/updater
С этим завершили.
Выходим из-под созданного пользователя и возвращаемся к root'у:
exit
Скачаем и распакуем в папку с Firefox программу-контроллер - "GeckoDriver":
cd /tmp
wget https://github.com/mozilla/geckodriver/releases/download/v0.26.0/geckodriver-v0.26.0-linux64.tar.gz
tar -xf geckodriver-v0.26.0-linux64.tar.gz
mv geckodriver /home/adsense/firefox/
rm geckodriver-v0.26.0-linux64.tar.gz
Зададим права доступа для файлов и папок программы:
chown -R adsense /home/adsense && sudo chgrp -R adsense /home/adsense
chmod +x /home/adsense/adscleaner/run.sh && chmod +x /home/adsense/adscleaner/run.sh
Выполним настройки программы, для этого открываем и редактируем файл nano "config.ini":
nano /home/adsense/adscleaner/data/config.ini
Очень важно правильно указать путь к папке с Firefox:
firefox_dir_path = /home/adsense/firefox/
Об остальных настройках программы из этого конфигурационного файла будет рассказано в следующем разделе.
Сохраняем файл.
Теперь программа готова к запуску. Для запуска процесса от имени пользователя нужно выполнить команду:
/home/adsense/adscleaner/adsense_cleaner.py
Чтобы запустить программу, но уже с очисткой ресурсов во временной папке и завершением оставшихся с прошлых сессий процессов, нужно выполнить скрипт:
/home/adsense/adscleaner/run.sh
Для настройки запуска Adsense Cleaner по расписанию достаточно добавить записи в Cron. перейдем под управление пользователем 'adsense' и откроем файл планировщика для данного пользователя:
su adsense
crontab -e
Добавляем список задач (время задано для примера, измените на свое усмотрение):
# m h dom mon dow command
10 1 * * * /home/adsense/adscleaner/run.sh >/dev/null 2>&1
10 5 * * * /home/adsense/adscleaner/run.sh >/dev/null 2>&1
10 10 * * * /home/adsense/adscleaner/run.sh >/dev/null 2>&1
10 13 * * * /home/adsense/adscleaner/run.sh >/dev/null 2>&1
10 16 * * * /home/adsense/adscleaner/run.sh >/dev/null 2>&1
10 19 * * * /home/adsense/adscleaner/run.sh >/dev/null 2>&1
10 22 * * * /home/adsense/adscleaner/run.sh >/dev/null 2>&1
Сохраняем файл.
На этом установка программы полностью закончена.
ВАЖНО! При запуске программы на удаленном сервере позаботьтесь о его безопасности:
- используйте длинные и сложные пароли для SSH;
- настройте Firewall для блокировки входящих соединений на не разрешенные порты;
- установите Fail2ban;
- убедитесь что файлы программы и сервер в безопасности.
Решение некоторых проблем при запуске
В процессе запуска программы на VPS/VDS или в LXC с виртуальным фреймбуффером (Xvfb) могут возникнуть ошибки, приводящие к неработоспособности. Они означают что вы забыли установить какой-то из необходимых компонентов.
Например, в некоторых случаях вы можете получить следующее сообщение:
xdpyinfo was not found, X start can not be checked! Please install xdpyinfo!
Это значит что в системе не хватает некоторых служебных утилит для работы X11, а именно - xspdyinfo. Чтобы это исправить достаточно установить программный пакет 'x11-utils':
sudo apt install x11-utils
Еще одна из возможных ошибок может содержать строку:
libgtk-3.so.0: cannot open shared object file: No such file or directory
Означает что в системе отсутствуют библиотеки GTK, установим их:
sudo apt install libgtk-3-0
Еще одна из ошибок, которая может возникнуть если вы не установили рекомендуемое ПО из раздела 'Установка' этой статьи:
libdbus-glib-1.so.2: cannot open shared object file: No such file or directory
Исправляется простой установкой пакета:
sudo apt install libdbus-glib-1-2
В случае возникновения других проблем - внимательно изучайте вывод программы в консоли, а также содержимое лог-файла 'geckodriver.log', который сможете найти в папке 'logs' программы AdsenseCleaner.
Еще одна из проблем, которая может возникнуть при запуске программы на удаленном VPS/VDS: Google Ansende откажет в авторизации с нового IP, требуя выполнить какое-то одноразовое действие для подтверждения того что с этого IP можно заходить в интерфейс партнерской программы.
В таком случае вам нужно как-то зайти в браузер, причем с IP который соответствует вашему VPS/VDS и вручную выполнить требования. Это можно сделать с локальной машины, проложив временный сетевой туннель к удаленному серверу и запустив программу через него у себя на компьютере.
Алгоритм: создаем туннель к серверу и открываем локальный порт для приема подключений через Socks5 прокси, в опции 'proxy' программы прописываем настройку прокси, запускаем программу и выполняем требование по авторизации системы. Дальше программа должна нормально авторизироваться и работать уже на самом VPS/VDS.
Как создать SSH-туннель к удаленному серверу и открыть локальный порт на ПК для подключений по протоколу Socks5? - используйте функционал программы ssh в GNU/Linux, а под MS Windows можно применить 'Plink' (из комплекта Putty), Bitvise SSH или когда-то популярную утилитку 'STunnel'.
Пример команды в GNU/Linux для создания сетевого туннеля к удаленному серверу (123.45.67.89) с открытием локального (адрес хоста 127.0.0.1) порта 8080 для приема соединений через прокси протокол Socks5:
ssh -N -C -p 22 -D 8080 username@123.45.67.89
Настройка программы
Конфигурационные файлы:
- options.ini - основной файл с настройками;
- firefox_options.json - опции для тюнинга работы браузера Firefox.
Теперь по пунктам распишу назначение опций в файле 'options.ini'.
Опции секции 'General' :
- firefox_dir_path - полный путь к директории с распакованным Mozilla Firefox;
- window_resolution - размеры рабочего окна браузера (разрешение, в пикселях);
- logs_dir_path - путь к папке слогами рабоыт программы;
- logs_enabled - разрешение/запрет системы логирования;
- logs_session_clean_on_start - чистить или нет логи, отсавшиеся с предыдущей сессии;
- proxy - адрес и порт прокси сервера (если нужно для работы);
- virtual_display - использовать или нет вирутальный фрейм-буффер. Пригодится при запуске программы в консоли, без установленной графической оболочки в ОС;
- exit_on_finish - завершить работу программы и закрыть браузер по завершению задач или ждать нажатия клавиши ЕНТЕР;
- debug_mode - включить/выключить режим отладки, выводит дополнительную информацию в процессе работы;
- testing_mode - включить/выключить режим тестирования. В этом режиме реальная блокировка найденных плохих юнитов не выполняется.
Секция 'Adsense' содержит два параметра - логин и пароль. Если какой-то из этих параметров не задан, то в консоли будет выведен запрос на ввод отстутсвующего параметра.
После первой авторизации скрипт запомнит настройки сессии и при последующем запуске вводить логин и пароль уже не понадобится, для безопасности их можно будет даже убрать из конфигурационного файла.
Секции 'Check_Unreviewed', 'Check_Reviewed' и 'Filter_All' - названия задач и их настройки.
Общие параметры для задач:
- enabled - разрешена ли к выполнению задача или нет
- order - порядок выполнения (от 1-3), первой выполняется задача с меньшим номером
Параметры 'urls_block_and_account_file', 'words_block_and_account_file', 'urls_block_file' и 'words_block_file' - содержат имена текстовых файлов с соответствующими их названию списками плохих слов, ссылок, доменов, шаблонов фраз.
Секция 'Check_Unreviewed':
- units_most_impressions_to_check - число юнитов, которое ложно быть проверено в категории с наибольшим количеством показов;
- units_prioritized_for_review_to_check - ...с наибольшим приоритетом для проверки.
Секция 'Check_Reviewed':
- units_to_check - количестов юнитов для проверки с категории с ранее просмотренными юнитами.
Секция 'Filter_All':
- words_block_limit - число слов, которые нужно брать для работы из начала файла со списком 'words_block_file';
- words_block_and_account_limit - ... 'words_block_and_account_file' (с блокировкой аккаунтов Adwords);
- category_reviewed - искать ли слова в категории 'Reviewed';
- category_unreviewed_most_impressions - искать ли юниты в категории 'Unreviewed' с максимальным количеством показов;
- category_unreviewed_prioritized - искать ли юниты в категории 'Unreviewed' с высоким приоритетом к модерации;
- collected_bad_words_add_to_top - использовать ранее попавшиеся в задачах 'Check_Unreviewed', 'Check_Reviewed' плохие слова для размещения в верху списков 'words_block_file' и 'words_block_and_account_file'.
В файле 'firefox_options.json' размещено множество опций для браузера Firefox, которые позволяют: уменьшить использование памяти, поотключать не нужные расширения, отказаться от пересылки лишних данных и тем самим сэкономив время и трафик.
Текстовые файлы со списками плохих слов, ссылок с доменами:
- words_block.txt - стоп-слова для задач по аудиту юнитов в категориях 'Reviewed' и 'Unreviewed';
- words_block_and_account.txt - то же самое что и в (1), только с дополнительной блокировкой аккаунтов Adwords;
- urls_block.txt - стоп-ссылки и домены, задачи по аудиту юнитов в категориях 'Reviewed' и 'Unreviewed';
- urls_block_and_account.txt - то же что и в (3) + блокировка аккаунтов Adwords;
- filter_block.txt - стоп-слова для задачи по поиску (фильтрации) среди всех доступных объявлений;
- filter_block_and_account.txt - то же что и в (5) + блокировка аккаунтов Adwords.
Списки (1)-(4) поддерживают регулярные выражения (Regular Expressions)!
Регулярные выражения - чрезвычайно мощное, но в тоже время, в контексте данной программы, несколько опасное средство. Опасность состоит в том, что составив шаблон с ошибкой и не предусмотрев всех вариантов, под блокировку по нему могут попасть несколько или даже много нормальных объявлений.
Если у вас нет опыта написания шаблонов RegExp, то лучше используйте простые стоп-слова и фразы, в данном случае это более безопасно.
По умолчанию программа настроена на выполнение всех трех задач в порядке: 1) 'Check_Unreviewed' 2) 'Check_Reviewed' 3) 'Filter_All'.
В процессе выполнения первых двух задач (1) и (2) программа проведет аудит указанного в насройках количества рекламных юнитов в категориях 'Reviewed' и 'Unreviewed', поблокирует соответствующие плохим фразам/RegExp/URL юниты и аккаунты Adwords.
В третьей задаче (3) программа выполнит поиск плохих юнитов глобально в категориях 'Reviewed' и 'Unreviewed' по словам из списков. Если в настройках задачи 'Filter_All' включена опция 'collected_bad_words_add_to_top', то перед своей работой все плохие слова, на которых попались плохие юниты в предыдущих задачах (1) и (2), будут допавлены в самый верх списков для поиска.
Таким образом, программа проверяет верхушки с указанным количеством юнитов в категориях, а потом дополнительно выполняет еще и глобальный поиск по всем юнитам с собранными в топе, на данное время наиболее часто встречающимися плохими словами.
Даже запустив программу на полностью автоматическую периодическую чистку, нужно не лениться несколько раз в неделю заходить в интерфейс программы с ПК и вручную проверять то что творится в центре просмотра объявлений. Попутно соберете новые стоп-слова и ссылки, добавите в списки для программы - это улучшит эффективность.
В завершение
Как показала практика, несколько запусков программы в сутки достаточно чтобы отловленные мошеннические объявления перестали отображаться на ваших сайтах, которые работают с партнерской программой Google AdSense. Чистку желательно выполнять в разное время суток, например: сутра, в полдень, под вечер и ближе к ночи.
Для автоматического запуска этой программы лучше всего выделить экономичный тихоработающий мини-ПК или же арендовать удаленный VPS.
На этом пожалуй все. Желаю вам побольше свободного времени на саморазвитие и для осуществления благих дел!
Полезные ресурсы:
Добрый день !
Очень интересная статья,я поражен вашим упорством. Тем более что на сайте не вижу ни одного рекламного блока.
Здравствуйте.
В будущем какая-то тематическая реклама на сайте возможно появится.
Приятно что вам понравилась моя работа )
Интересно повторить данный подход на более других технологиях ) Селениум и Питон 2.7 слишком страшно звучит.. за еще и Firefox 45-
Есть Хуманы, Зенки, BAS
Кроме того есть ряд совсем уж озверелых технологий на базе nodejs..
Как интересно вообщем.
Технологии развиваются очень стремительно, каждый найдет себе наиболее подходящие инструменты, на которые хватит знаний и ресурсов.
Human Emulator, Zenno Poster - это платные программные продукты с закрытым исходным кодом, никто не может дать гарантии что там нет каких-то стучалок, бекдоров и т.п.
Чтобы запустить скрипт автоматизации с этим ПО на удаленном хосте потребуется достаточно мощный VPS/VDS с 4GB+ RAM и MS Windows на борту (а это не есть good).
Я некоторое время работал с Human Emulator - много возможностей, хорошая техподдержка, лицензия стоит не мало, привязанность к Windows и конкретной машине.
Browser Automation Studio (BAS) - бесплатное решение с открытым исходным кодом. Рассматривал эту достаточно интересную программу в качестве платформы для создания решения по чистке мусора в ADSense.
Не выбрал BAS потому что нет поддержки мультиплатформенности, ограниченные возможности по связке с другими решениями, имеет привязку к одному браузеру (chromium). BAS ориентирована скорее на тех, кто не очень знаком с программированием, со всеми вытекающими из этого плюсами и минусами.
Мне, как программисту, хотелось иметь более универсальное, мощное и максимально контролируемое решение, которое смогу запускать на легковесных Linux VPS, привязывать разные браузеры (в том числе и без GUI, headless), интегрировать с другими программными продуктами и скриптами...
Python + Selenium оказался именно тем что нужно:
Кроме того, управлять Селениумом можно используя такие языки программирования как: Java, C#, Ruby, Python, Javascript (Node). Также уже написаны сторонние (не официальные) обертки для следующих языков: PHP, Perl, Haskell, Objective-C, R и других. Эти проекты постоянно развиваются!
Программа переделана с нуля, добавлены новые возможности и удобства. Статья также была полностью переработана: детально описан функционал новой версии программы, а также приведены новые факты и информация по теме.