Найти тему
Визуализация

Как я подавал до 100 объявлений в день на Avito

Несколько лет назад я решил предлагать услугу по установке фирменных ограждений посредством размещения объявлений на Avito. По правилам этой площадки, каждое объявление должно было быть уникальным. Каждый день поданное мной объявление опускалось в поиске и его меньше просматривали. В первый день у поданного объявления было около 30 просмотров. Во второй день — 3 просмотра. В третий и последующие — 1 просмотр или вообще 0.

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

Это можно было сделать двумя путями:

Первый путь - это поднятие объявления в поиске. Услуга платная, дорогая. Она не оправдывала себя, так как прибыль не покрывала эти расходы. После скупки конкурентов OLX и Slando, Avito задрала цены до небес. Федеральная Антимонопольная Служба оставалась пассивной. Российский директор, нанятый иностранными владельцами Avito, рассказывал в интерьвю о собственной неудержимой радости от хлынувших к ним гигантских денежных потоках. Я не стал делать ставку на этот путь. Я уже и так прилично заплатил этим ребятам.

Вторым путём было ежедневное размещение объявления. Такого же. Об этой же услуге. Но это противоречило правилам Avito. Значит нужно было изменять объявление таким образом, чтобы текст и фотогафия былы другими, но смысл сохранился тем же, что и в предыдущем объявлении. Я выбрал этот путь.

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

Через два дня подобных размещений я выдохся. Дальше так продолжаться не могло. Нужно было искать способ поручать эту рутину машине. Тем более что мои конкуренты давно уже делали это, выдавливая мои объявления вниз списка. Мне нужно было срочно восстанавливать паритет. Я решил написать программу, которая публиковала бы мои объявления за меня.

На тот момент я немного знал язык программирования Javascript и не считал себя программистом. Узнав про Node.js - технологию, позволяющую выполнять Javascript вне браузера, я обрадовался и принялся за работу. Через несколько дней скрипт, генерирующий контент для моих объявлений был готов. Я запустил его и пришёл в восторг наблюдая за происходящим. На моих глазах запускался браузер, загружал страницы Avito, заполнял поля ввода и размещал сгенерированные им уникальные объявления.

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

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

Получив минимальный опыт в программировании, я понял что Javascript - не лучший язык для этого. Специально для того чтобы написать новую версию своего скрипта, который победит Avito, я принялся изучать язык программирования Python. После прочтения книги Марка Лутца "Изучаем Python", на что у меня ушло два месяца, я принялся за дело. Через еще несколько недель новый скрипт успешно заработал. Я назвал его Unicon. Он написан гораздо аккуратнее первого скрипта, разделен на модули и имеет графический интерфейс пользователя. Ниже: о том как он устроен.

Unicon - программа для генерации и размещения объявлений

Модуль генерации текста программы Unicon работал так: он брал заранее подготовленный мной шаблон объявления в формате spintax, в котором были прописаны синонимы почти к каждому слову в объявлении и случайным образом выбирая синоним составлял новый уникальный текст объявления.

Далее вступал в работу модуль генерации фотографии. Он выбирал одно из заранее заготовленных фото из папки и накладывал на него фильтр. Фильтр я писал сам. Работа фильтра заключалась в переборе всех пикслелей изображения в цикле и случайного изменения одного из цифровых значений одного из трех цветов (RGB) на единицу в сторону уменьшения или прибавления.

После того, как объявления было готово, его нужно было опубликовать. Я пробовал для этого библиотеку Selenium. Она была специально создана для управления браузером из программ. Но она у меня, почему то не хотела работать. Эксперты-тестировщики, искушенные работой с Selenium знали, что необходимо было выставлять небольшие задержки между действиями программы в браузере, но я в короткий срок не мог получить этот опыт. Возможно Avito защищалась от этого и им это удавалось.

Мне удалось найти другой способ - генерация макросов iMacros и запуск браузера с параметрами для iMacros.

Итак, модуль публикации писал макрос, скармливал его запущенному в отдельном процессе браузеру и браузер выполнял этот макрос.

Задачей макроса было не просто заполнить поля на странице и отправить объявление на модерацию. Ему нужно было пройти защиту от роботов. Или от макросов, как в данном случае. Этой защитой была CAPTCHA. Картинка с цифрами и буквами, которую должен был ввести человек.

Ища способ решения проблемы с капчой я узнал о сервисе anti-captcha.com. Я поручил макросу отправлять картинку с кодом капчи на этот сервис, где люди, работающие на этот сервис, разгадывали эту капчу и мой макрос получал обратно текст капчи. Таким образом объявление могло быть успешно размещено.

Окно программы Unicon

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

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