Программирование, радиоэлектроника,
саморазвитие и частичка из моей жизни здесь...

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.

Содержание статьи:

  1. Предыстория, причины, последствия
  2. Что с этим всем делает Google?
  3. Как избавляться от плохих объявлений
  4. Описание работы, системные требования
  5. Программа и ее исходный код
  6. Установка
  7. Решение некоторых проблем при запуске
  8. Настройка программы и списки для блокировки
  9. В завершение

Предыстория, причины, последствия

Для написания этой программы мне пришлось плотно поработать с веб-интерфейсом Google AdSense, проанализировать объявления как на сайтах, так и в интерфейсе партнерской программы, разобраться в том что же они из себя представляют и как загружаются.

Чтобы было понятнее о чем будет идти речь, вы можете ознакомиться с примерами таких объявлений в темах для обсуждения на нескольких SEO-форумах:

Чего только не используют мошенники (далее просто МШ) из рядов вебмастеров-арбитражников чтобы побудить посетителя на клик по фейк-объявлению:

  • фальшивые новости;
  • информацию о том, что с каким-то человеком что-то случилось (например смерть или болезнь);
  • лживые уведомления о том что "император" повысит/отменит пенсию, поднимет зарплаты;
  • предложения посмотреть видео с п#Pно;
  • лживые рекомендации по мужскому здоровью, оздоровлению больных и старых;
  • и т.п.

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

Насколько же подлыми, бессовестными и бескультурными нужно быть, чтобы плодить такие объявления... ведь не понимая того сами призывают к себе беду (и даже к своим близким), творя себе карму.

Видать, таков сейчас выбор этих невежд. :(

Каким же образом плохие объявления попадают в рекламную сеть Google, а потом отображаются на сайтах? - все выглядит примерно вот так:

  1. Новоприбывшему в "армию" МШ попадается в руки (просто так или за деньги) мануал/информация по сливу трафика из сети Google Adwords. Например подобное можно встретить на каком-то форуме о сером/черном SEO;
  2. МШ начинает процесс массовой регистрации или покупки фейковых (по сути одноразовых) аккаунтов Google Adwords.
  3. Для обхода антифрод (antifraud) систем от Google используются различные "супер-браузеры" - по сути это песочницы, специально переписанные браузеры или браузеры в виртуальных машинах, так называемые "антидетекты". Это платные продукты с закрытым исходным кодом, которые не исключено что могут содержать бекдоры, стиллеры и прочие сюрпризы. Таким образом МШ, зарабатывая на купонах Adwords, могут сами того не понимая сливать свою персональную информацию и доступ к ПК другим МШ (которые написали антидетект)...но это уже другая не менее интересная история;
  4. Для пополнения баланса рекламного кабинета в Adwords могут использоваться деньги, полученные каким-то легким мошенническим путем, или же бонусные купоны системы Adwords, добытые также в массовом количестве и потом привязанные к фейковым аккаунтам рекламной системы;
  5. МШ готовит сайт-прокладку с настроенной системой дистрибуции трафика или же простыми редиректами 301. Для этого часто используются бесплатные площадки (например Тильда, Блогспот и т.п.), также это может быть выделенный сервер с установленной и настроенной TDS (Traffic Distribution System) и привязкой к множеству доменов-однодневок;
  6. МШ создает рекламную кампанию в фейковом аккаунте рекламной сети, в качестве адреса сайта указывает какой-то из доменов-однодневок, на котором создан казалось бы безобидный тематический сайт, но так он отображается только для системы Adwords и на период модерации (в теме арбитража трафика это называют "клоакингом", сокрытием);
  7. Система Adwords в автоматическом режиме переходит на этот сайт и проверяет его содержимое, система на домене-однодневке выдает безобидный контент на период модерации или определив что на сайт зашел робот от Google (например по строке UserAgent). Таким образом объявление проходит модерацию;
  8. Пользователь, кликнув на это объявление от МШ, что отображено на каком-то из сайтов участвующем в партнерской сети Google AdSense, увидит уже не тот контент что прошел модерацию, а совсем другой или же будет перенаправлен на другой сайт с каким-то мошенническим предложением. Для этого используются возможности TDS.

Это лишь один из алгоритмов работы МШ в этой теме, есть и другие мутации.

Чем вредны такие объявления от мошенников? - целым рядом проблем для сайта и его владельца, для посетителей и даже самой компании Google:

  1. За наличие подобных мошеннических объявлений на сайте он может получить фильтр или же другие санкции от Яндекса или Гугла (это не опечатка, компания может наказать за мошеннический контент, который фактически попал к вам из ее же сети);
  2. Подобные объявления на сайте могут в прямом смысле распугать/разогнать от ваших проектов всех прямых рекламодателей, если они вдруг увидят какой треш от МШ у вас там отображается рядом с их оплаченными баннерами;
  3. Такие объявления от МШ несут вред людям - обманывая их, выкачивая деньги и давая фальшивые надежды/обещания;
  4. Испорченная репутация сайтов-доноров рекламы, а также платформы Youtube (ведь там также отображается гадость от МШ в виде рекламных блоков и вставок).

Что с этим всем делает Google?

Что же делает компания Google в борьбе с этой напастью, спросите вы? - что-то там делают...и уже много лет (начиная где-то с 2012 !).

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

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

В интерфейсе Google Adsense для партнеров было сделано несколько редизайнов, добавлены некоторые возможности и удобства в центре просмотра объявлений.

Да, стало немножко удобнее искать и блокировать мусор вручную, но все же это как и раньше было практически бесполезно, особенно если нужно прогнать все объявления по списку из 100-500 стоп-слов.

Сидеть весь день напролет и вбивать руками стоп слова - это адский труд, к тому же практически малополезный, поскольку новые объявления от МШ могут появиться уже на второй час и все нужно повторять сначала, не закончив при этом еще и предыдущий проход.

Некоторый прогресс в решении проблемы можно было наблюдать лишь со второй половины 2019-го года: была добавлена возможность отправить жалобу на любое из объявлений, также немного ужесточился процесс регистрации новых аккаунтов Adwords. Были закрыты некоторые "дыры" в системе, которые позволяли МШ практически бесконтрольно со стороны партнерской сети плодить мусорные объявления в огромных масштабах.

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

В рекламном интерфейсе Adsense каждый день появляются новые вариации вредоносных объявлений от МШ, для маскировки в ход идут различные символы из кодировки UTF-8, пробелы между символами, манипуляции словами и многое другое.

Из вариантов решения проблемы можно выделить пожалуй два:

  1. Полный отказ от использования Google Adsense. Согласитесь, это не лучший вариант, но судя по отзывам в сети, все же некоторое количество пользователей, беспокоящихся за репутацию своих проектов, сделало такой не простой выбор;
  2. Создание продуманной системы автоматизации чистки объявлений самостоятельно или на заказ.

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

Почему так? - сложность реализации, постоянная мутация методов МШ, ну и деньги...

Как избавляться от плохих объявлений

Из того, о чем отписались в тех-поддержке, можно выделить рекомендацию по ручному отлову мошеннических объявлений на самом сайте с их последующим добавлением в форму для рассмотрения модераторами 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;
  • Авторизация. Если логин или пароль не указаны в конфигурационном файле - запрос в консоли на ввод нужных данных;
  • Выполнение задач по аудиту и поиску объявлений;
  • Вывод статистических данных в консоли.

Список задач по аудиту и поиску объявлений:

  1. Аудит объявлений в категории "Unreviewed" (не просмотренные);
  2. Аудит объявлений в категории "Reviewed" (просмотренные);
  3. Глобальный поиск плохих объявлений по заданным ключевым словам и фразам.

Ниже привожу пример консольного вывода программы в процессе своей работы:

Вывод информации программы AdSense Cleaner в консоли, в процессе поиска и блокировки мошеннических объявлений

Рис. 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.

Программа и ее исходный код

Исходный код программы, все скрипты и ресурсы можно скачать в виде архива: 7Zip архив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 вы должны знать что:

  1. Программа не вносит никаких изменений и дополнений в программный код или части пользовательского интерфейса Google AdSense, она всего лишь автоматизирует ручные действия пользователя;
  2. Используя, изменяя и дополняя эту программу вы берете на себя всю ответственность за все возможные последствия;
  3. Я не обязываюсь дорабатывать и поддерживать данную программу под чьи-либо нужды, она поставляется в таком виде в котором есть. По возможности буду освежать программный код.

Я не несу никакой ответственности за возможные последствия использования вами данной программы, используйте с умом!

Установка

Ниже расписан процесс установки программы на компьютер или 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

Сохраняем файл.

На этом установка программы полностью закончена.

ВАЖНО! При запуске программы на удаленном сервере позаботьтесь о его безопасности:

  1. используйте длинные и сложные пароли для SSH;
  2. настройте Firewall для блокировки входящих соединений на не разрешенные порты;
  3. установите Fail2ban;
  4. убедитесь что файлы программы и сервер в безопасности.

Решение некоторых проблем при запуске

В процессе запуска программы на 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

Настройка программы

Конфигурационные файлы:

  1. options.ini - основной файл с настройками;
  2. 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, которые позволяют: уменьшить использование памяти, поотключать не нужные расширения, отказаться от пересылки лишних данных и тем самим сэкономив время и трафик.

Текстовые файлы со списками плохих слов, ссылок с доменами:

  1. words_block.txt - стоп-слова для задач по аудиту юнитов в категориях 'Reviewed' и 'Unreviewed';
  2. words_block_and_account.txt - то же самое что и в (1), только с дополнительной блокировкой аккаунтов Adwords;
  3. urls_block.txt - стоп-ссылки и домены, задачи по аудиту юнитов в категориях 'Reviewed' и 'Unreviewed';
  4. urls_block_and_account.txt - то же что и в (3) + блокировка аккаунтов Adwords;
  5. filter_block.txt - стоп-слова для задачи по поиску (фильтрации) среди всех доступных объявлений;
  6. 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.

На этом пожалуй все. Желаю вам побольше свободного времени на саморазвитие и для осуществления благих дел!

Полезные ресурсы:

Если статья оказалась полезной - помочь проекту можно тут: 👍 ПОМОЩЬ, 🎁 DONATE
1 2825 Python
Комментарии к публикации (5):
jkeks #1jkeks
07 Август 2017 15:24

Добрый день !
Очень интересная статья,я поражен вашим упорством. Тем более что на сайте не вижу ни одного рекламного блока.

0
ph0en1x #2ph0en1x
07 Август 2017 18:26

Здравствуйте.

...на сайте не вижу ни одного рекламного блока.

В будущем какая-то тематическая реклама на сайте возможно появится.
Приятно что вам понравилась моя работа )

0
jkeks #3jkeks
07 Август 2017 21:36

Интересно повторить данный подход на более других технологиях ) Селениум и Питон 2.7 слишком страшно звучит.. за еще и Firefox 45-
Есть Хуманы, Зенки, BAS
Кроме того есть ряд совсем уж озверелых технологий на базе nodejs..
Как интересно вообщем.

0
ph0en1x #4ph0en1x
07 Август 2017 22:46

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

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 оказался именно тем что нужно:

  • Свободное ПО, открытый хорошо документированный исходный код;
  • Легковесность и возможность масштабирования;
  • Кроссплатформенность - работает на Linux, Windows, Mac;
  • Хороший набор поддерживаемых браузеров: MS IE, Firefox, Chromium, Safari, PhantomJS;
  • Простота и минимум кода - "write less, do more!"
  • Связка, зная которую, можно писать гибкие программные решения, найти интересную работу и т.п.

Кроме того, управлять Селениумом можно используя такие языки программирования как: Java, C#, Ruby, Python, Javascript (Node). Также уже написаны сторонние (не официальные) обертки для следующих языков: PHP, Perl, Haskell, Objective-C, R и других. Эти проекты постоянно развиваются!

0
ph0en1x #5ph0en1x
10 Январь 2020 16:58

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

0