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

AdsenseCleaner - блокируем плохие объявления с помощью Python+Selenium

Программа была создана для помощи моему хорошему знакомому, которого по его словам уже достала каждодневная ручная чистка десятков мошеннических объявлений в центре модерации партнерского интерфейса Google AdSense. Для написания я использовал Python + Selenium WebDriver.

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

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

  1. Предистория и исследования
  2. Как избавляться от плохих объявлений
  3. Как работает программа
  4. Требования для программы
  5. Программа и ее исходный код
  6. Установка в ОС Windows
  7. Установка в GNU/Linux
  8. Настройка программы
  9. Списки стоп-фраз
  10. В заключение

Предистория и исследования

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

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

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

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

Я даже не знаю чем думают те люди, которые плодят такие объявления, они же сами называют на себя беду. Желая зла другим, человек получит это же зло к себе обратно, только многократно приумноженное, и никакие заработанные на этом грязные бумажки не спасут... Видать, таков их выбор. :(

По сути, эти объявления ведут на лендинги и странички с мобильными подписками. Для прохождения модерации в AdWords и маскировки ссылок от Гугла используются системы распределения трафика - Traffic Distribution System (TDS):

  • Если зайдет робот гугла (google bot, adsense bot, adwords) то его переадресует на страничку с доменом, который прописан в конце длинной ссылки с параметрами;
  • Если же зайдет кто-то из десктопного или мобильного браузера - то его перенаправит на какой-то грязный сайт или страницу приземления (Landing Page) с формой подписки, скачиванием вредоносного файла и прочими уловками.

Рассмотрю идин из примеров работы данного механизма. Допустим что один из возможных примеров ссылки на объявление (домены вымышлены для примера): http://exampletds80.com/?url=http://example-good-site.com

При добавлении объявления с такой ссылкой в систему Adwords, TDS на сайте exampletds80.com выполнит редирект на домен example-good-site.com (TDS понимает по заголовкам запроса что зашел бот), робот увидит что все хорошо и объявление не получит никаких замечаний по поводу ссылки. При просмотре такого объявления в партнерском кабинете AdSense, возле него вы также увидите только домен example-good-site.com.

Когда пользователь выполнит клик по такому объявлению на сайте то TDS, поднятая на домене exampletds80.com, отправит его уже совсем не на example-good-site.com, а на любой другой сайт, который заложен в настройках TDS.

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

В процессе работы в разделе разрешения-блокировки объявлений интерфейса Google AdSense был замечен один странный момент: в одобренных пользователем объявлениях (они отображаются в сероватом оттенке) можно было встретить те же мошеннические блоки, хотя пользователь их 100% не одобрял.

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

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

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

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

Я общался с другими вебмастерами, котрые используют AdSense, многие это все уже знают и даже писали об этом в поддержку Google AdSense/AdWords. К сожалению, ответы и рекомендации были получены "стандартные", хотя проблема уже существует очень давно.

Из того полезного, о чем написала тех-поддержка, можно выделить рекомендацию по ручному отлову мошеннических объявлений на самом сайте с их последующим добавлением в форму для рассмотрения модераторами AdWords: https://support.google.com/adwords/contact/feedback

Поэтому, я бы рекомендовал не только блокировать плохие объявления в центре просмотра AdSense, но и "вылавливать" их на сайте запуская при этом браузер "с чистого листочка" (почищенные куки, история, приватный режим) с последующей отправкой собранной информации модераторам AdWords.

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

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

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

Как работает программа

По порядку распишу алгоритм работы программы:

  • Программа загружает страницу авторизации Google AdSense
  • Выполняет авторизацию (вводит логин + пароль)
  • Открывает главное боковое меню (слева)
  • Выбирает пункт меню "Allow & Block ads" (по умолчанию выбран подпункт: для всех сайтов)
  • Переходит на вкладку с центром просмотра объявлений - "Ads (Ad review center)"
  • Выполняет фильтрацию и блокировку объявлений для каждого из списков слов.

Фильтрация объявлений выполняется на основании стоп-слов (стоп-фраз) и поделена на три фазы:

  1. Список стоп-слов "1" - поиск плохих объявлений, их блокировка + блокировка аккаунтов AdWords;
  2. Список стоп-слов "2" - поиск плохих объявлений и их блокировка;
  3. Список стоп-слов "3" - поиск плохих объявлений по стоп-словам с пересмотром объявлений в ручном режиме.

Как работает каждая из фаз модерации:

  • Программа нажимает на кнопочку "Filter";
  • Вводит стоп-слово или стоп-фразу;
  • Ждет появления объявлений на странице;
  • Выполняются действие с объявлениями, если они присутствуют;
  • Проверяется доступна ли следующая страница с найденными плохими объявлениями (только для фаз 1 и 2), если да то загружает ее выполнив клик по кнопке со стрелкой "Next ads";
  • Цикл повторяется.

Выполняемые с объявлениями действия:

  • Для первого списка стоп-фраз программа блокирует каждое из объявлений (все на странице) + AdWords-аккаунты рекламодателей для каждого объявления;
  • Для второго списка - только блокировка всех отображаемых на странице объявлений;
  • Для третьего списка - сообщает пользователю (в консоли) что можно приступить к осмотру найденых по фразе объявлений и что для фильтрации по следующему слову из списка нужно нажать ENTER.

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

Скриншот вывода информации программы AdSenseCleaner в консоли

Рис. 1. Скриншот вывода информации программы AdSenseCleaner в консоли.

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

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

Для каждой страницы, на которой было заблокировано хотя бы одно объявление, программа в процессе своей работы будет создавать скриншот экрана в папке "tmp", которая размещается (будет создана) там же где находится сам скрипт программы.

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

Требования для программы

Для работы программу нужно:

  • Интерфейс Google AdSense переключенный на новый дизайн (старый не поддерживается);
  • Интерфейс Google AdSense с выбранной по умолчанию английской локалью (EN), программа автоматически переходит на страницу авторизации указывая в URL что язык должен быть EN;
  • Python=2.7 (с версией 3+ работать не будет);
  • Модуль "selenium" версии 2.53.0 (последняя версия в ветке 2.х) для Python;
  • Модуль "transliterate" для Python;
  • Веб-браузер Mozilla Firefox версии 45 и ниже.

Почему python 2.7, selenium 2.53.0 и Firefox 45 ? - более свежая 3-я версия селениума, на момент написания программы, находится в стадии "Beta" и при работе с ней присутствует баг с неработоспособностью ActionChains (кроется он в geckodriver - issue 159) без которых я бы не смог автоматизировать перемещение мышки (mouse hover). Также для 3-й версии селениума уже нужен браузер Firefox версии 48+ с установленным Geckodriver (marionette).

Поэтому я и использую в программе последнюю стабильную версию Selenium 2.х, а также рекомендую для программы Firefox 45 ESR (Extended Support Release).

Теперь расскажу как это все вместе установить и связать.

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

Исходный код программы выложен на GitHub: https://github.com/ph0x0en1x/AdsenseCleaner

Также программу можно скачать прямо здесь: AdsenseCleaner-master.zip (10Кб).

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

Распаковать программу можно в любую удобную для вас папку и на любой диск (можно даже на флешку).

ВНИМАНИЕ! Если вы получили копию этой программы из другого сайта/форума/облака (а она вполне может разойтись по разным сайтам) или же вам кто-то прислал свою ссылку на скачивание "улучшенной версии", то вы должны понимать что ее вполне могли изменить для выполнения каких-то вредоносных целей, или же проще-простого - для кражи логина-пароля к AdSense.

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

ВНИМАНИЕ! Используя программу AdSenseCleaner вы должны знать что:

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

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

Установка в ОС Windows

Первым делом нужно установить Python 2.7, переходим на сайт: https://www.python.org/downloads/

Качаем самую свежую версию 2.7.Х для Windows, запускаем установку питончика:

Установка Python под Windows, начало

Рис. 2. Установка Python под Windows, начало.

Установка Python под Windows, выбор папки для установки

Рис. 3. Установка Python под Windows, выбор папки для установки.

По умолчанию Питон 2.7 под Windows будет установлен в папку "c:\Python27", вы же можете указать другой путь на свое усмотрение.

Установка Python 2.7 под Windows, выбор компонентов

Рис. 4. Установка Python 2.7 под Windows, выбор компонентов.

На этом этапе необходимо разрешить установку компонента "Add 'python.exe' to Path", что в свою очередь позволит запускать "python.exe" без указания полного пути к исполняемому файлу.

Теперь запускаем "cmd" от имени Администратора, думаю все это знают, но все же:

Запуск командной строки (консоли) в Windows от имени администратора

Рис. 5. Запуск командной строки (консоли) в Windows от имени администратора.

Запускаем в консоли команду:

pip install selenium==2.53.0 transliterate

Модули для питона должны успешно загрузиться и установиться:

Окно консоли с успешными результатами выполненной команды pip

Рис. 6. Окно консоли с успешными результатами выполненной команды pip.

Загружаем Mozilla Firefox 45 ESR из архива: https://download-installer.cdn.mozilla.net/pub/firefox/releases/45.0esr/

Выбираем в списке "win32" или "win64", в зависимости от вашей платформы (предпочтительно win64), в списке языков ищем "en-US/", а дальше качаем EXE-файл размером примерно 43МБ.

Теперь нам нужен распакованный (не обязательно установленный в систему) Firefox, для этого запускаем установку (можно на виртуальной машине или другом PC), после установки копируем папку "Mozilla Firefox" с установленной программой из папки "Program Files" в папку с программой AdsenseCleaner или на другой диск/папку по вашему усмотрению.

После этого через панель управления Windows удаляем программу Mozilla Firefox 45 из системы чтобы можно было установить более свежую версию для повседневной работы. На этапе конфигурации мы укажем путь к уже скопированной папке с Mozilla Firefox, таким образом наш скрипт будет использовать именно Firefox 45 ESR.

Установка в GNU/Linux

С Ubuntu/Debian GNU/Linux все намного проще, питон 2+ уже присутствует в системе по умолчанию, возможно лишь потребуется установить менеджер пакетов - PIP:

sudo apt-get update && sudo apt-get install python-pip

Теперь установим модули selenium и transliterate:

sudo pip install selenium==2.53.0 transliterate

Скачиваем Mozilla Firefox 45 ESR из архива: https://download-installer.cdn.mozilla.net/pub/firefox/releases/45.0esr/

У вас скорее всего 64-битная сисмема, поэтому переходим в "linux-x86_64/", дальше в "en-US/" и качаем архив в формате tar-bz2 (примерно 48Мб). Распаковываем архив в папку с программой AdsenseCleaner или в другую на ваше усмотрение.

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

Открываем для редактирования файл "config.py", для этого можно использовать любой текстовый редактор который умеет работать с текстом в кодировке UTF-8. Для Windows отлично подойдет Notepad++ или Scite, а также можно использовать редактор "IDLE", который уже установлен вместе с Python.

Указываем свои логин (USERNAME) и/или пароль (PASSWORD) для AdSense если не хотим их вводить в консоли при каждом запуске программы:

'adsense_login': 'USERNAME',
'adsense_password': 'PASSWORD',

ВНИМАНИЕ! Если вы все же решили сохранить данные авторизации для AdSense в файле "config.py" то следует дополнительно позаботиться о безопасности. Хорошим решением будет хранить программу AdsenseCleaner на шифрованном диске или в криптоконтейнере.

Дальше нужно указать путь к исполняемому файлу firefox (firefox.exe). Вот пример указания пути к файлу для Microsoft Windows (должны быть по два слеша):

'firefox_binary_path': 'C:\\Adsense\\Mozilla Firefox\\firefox.exe'

Для GNU/Linux:

'firefox_binary_path': '/home/AdsenseCleaner/Firefox/firefox', 

Теперь выполним настройку стоп-фраз (стоп-слов). В списке 'words_block_units_and_accounts' содержатся стоп-фразы, для блокировки как самих объявлений, так и аккаунтов AdWords для каждого из них, пример:

'words_block_units_and_accounts':[ 
        u'dating for s#x',
        u'kazzzino',
        ],

Каждая фраза пишется в кавычках, а перед первой кавычкой пишем еще букву "u" (что значит UTF), прмиер:

u'слово_для_фильтра',

В список 'words_block_units' прописываем только те стоп-фразы, для которых будут блокироваться только сами объявления (без аккаунтов), пример:

'words_block_units': [
        u'mega super effect',
        ],

Ну и на последок - список для перебора программой стоп-фраз и получения возможности ручной модерации объявлений (программа ничего не блокирует, только вводит слова в фильтр), пример:

'words_block_manual_mode': [
        u'free download',
        u'hot news',
        ],

Если же какая-то из фаз работы вам не нужна, например первая (вы не хотите блокировать аккаунты), то оставляем список пустым:

'words_block_units_and_accounts': [
        ],

Для запуска программы в ОС Windows можно просто выполнить клик по скрипту "adsense_cleaner.py":

Папка со скриптами программы на Python

Рис. 7. Папка со скриптами программы на Python.

Для запуска под Linux можно выполнить команду:

python /path-to-program/AdsenseCleaner/adsense_cleaner/adsense_cleaner.py

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

Списки стоп-фраз

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

БУДЬТЕ ВНИМАТЕЛЬНЫ! Нужно понимать, что если под ваше стоп-слово попадет нормальное объявление, то заблокировав аккаунт рекламодателя все уже созданные и в будущем создаваемые им объявления больше никогда не будут отображаться на ваших сайтах! Программа не ведет историю заблокированных аккаунтов.

Поэтому нужно очень тщательно выбирать стоп-фразу, а лучше если не хотите рисковать, использовать в программе только фазу 2 (блокировка объявлений без аккаунтов) и 3 (ручной просмотр).

Рекомендую после каждого использования программы вручную просматривать хотя-бы 3-6 страниц объявлений с установленной и без установленной галочки "отображать уже одобренные объявления". Таким образом можно выловить свежую гадость, изучить ее и добавить нужное стоп слово или стоп-фразу в конфигурационный файл программы.

ВНИМАНИЕ! Не выкладывайте свои списки стоп-фраз в публичный доступ! А также не составляйте слишком длинных (60+) списков стоп-слов, оставляйте только проверенные и актуальные.

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

В заключение

Как показала практика, 2-3 запуска программы в сутки достаточно чтобы отловленные объявления  перестали отображаться на сайтах которые работают с партнерской программой Google AdSense. Чистку лучше всего выполнять в разное время суток, например сутра, вечером и ночью (если не спите).

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

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

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

0 87 Python
captcha