Как стать автором
Обновить

Накручивая счетчик посещений сайта

Неожиданно


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

Что нужно?


Функциональность бота должна быть следующей: мы говорим сколько «человек» (на самом деле ботов) сколько посещений сделают за какое количество времени на каком сайте. В отдельном файле указываем список прокси-серверов (не с одного же IP будем сидеть) и запускаем.

Например, 100 «человек» в течение часа должны сделать 500 посещений на сайте example.com.

Бот должен рандомно распределить сколько посещений сделает каждый «человек» и сколько времени потратит на каждое посещение. Посещение — это переход по сайту. Ну и, соответственно, реализовать эти посещения. Также он рандомно должен распределить с какого браузера делается посещение. Но при этом логично, что посещений с Internet Explorer не должно быть больше остальных.

Как делать?


Реализовывал бота на Питоне. С использованием очень классной библиотеки mechanize. С ней я работаю уже не первый день. По сути, она эмулирует браузер без javascript, умеет автоматически работать с куки, сабмитить формы и, наверное, что-то еще умеет, но мне и этого хватает.

Была лишь одна вещь, которую я не знал: как реализовать подключение через прокси. Но на stackoverflow.com быстро нашелся ответ. Он до смешного прост, всего одна строка.

И вот я приступил к написанию. Бот должен уметь искать ссылки на странице сайта, чтобы переходить по ним. Для этого использовался модуль под названием BeautifulSoup. Он умеет парсить страницы, находить, например, все ссылки. Это и нужно. На хабре этот модуль ругают за глючность, но меня он пока не подводил.

Самым сложным в написании бота было «разумный рандом». Нужно рандомно, но разумно распределить все параметры «человека», который посещает сайт (браузер, количество посещений, рандомное время на каждое посещение) таким образом, чтобы это не было похоже на бота.

Работает!


Через несколько часов бот был готов. И я такой весь на радостях запустил его. А он… работает! Довольный собой, решил поставить у себя на сайте счетчик посещаемости от яндекса. Поставил. Запустил бота. Бот успешно выполняется, но счетчик не растет. Зашел на сайт через браузер — счетчик сработал. А на бота не действует. Что такое?

Не работает


И тут я понял то, что следовало бы понять еще в самом начале. Любой счетчик — это javascript. Нет javascript 'а — счетчик не сработает. А, как я уже говорил, mechanize — это браузер без javascript, а значит писать такого бота на нем — глупость.

Что же делать?


Эмуляторов бразуера с javascript не существует. Ну это и логично, во-первых, чтобы эмулировать браузер, придется реализовать javascript на Питоне, а во-вторых, даже если предположить, что мы реализовали javascript, мы получим полноценный браузер. Тогда не проще ли использовать уже существующий браузер? И вот когда эта фраза прозвучала у меня в голове, я открыл новую вкладку и написал «python bindings google chrome». Первой строчкой google выдал мне CEF Python. Как оказалось, это движок chromium (на основе которого написан google chrome) с биндингами к Питону. То есть по сути это браузер, в котором мы можем управлять не мышкой и клавиатурой, а скриптами на Питоне. «Вау!» — подумал я — «То, что нужно.»

Но как-то лень уже было качать, настраивать, разбираться. Подумал: «Ну ладно, просто скачаю пока, потом разберусь». И знаете, я скачал, запустил готовый пример с сайта, мне открылось окошко в котором был браузер. Все работало. Никаких настроек. Никаких ошибок. Это был полноценный браузер. Последовало еще одно «вау» и появилось желание разбираться. Сделал поиск по документации. Узнал, что можно менять user-agent'а (говорить сайтам, что мы с разных браузеров сидим). Отлично. Автоматически переходить по нужным ссылкам. Отлично. Даже выполнять произвольный javascript на странице открытого сайта. Отлично. Потестировал на своем сайте, счетчик растет. Еще одно «вау». Осталось объединить CEF Python с моим уже написанным ботом и будет готов новый бот, бот с javascript, бот, которого видят счетчики.

Есть лишь одна проблема. Прокси. В документации к CEF Python о нем ничего не сказано. Зато на stackoverflow подсказывают, что есть библиотека _winreg, которая работает с Windows-реестром, а в нем можно указать прокси. У меня пока ничего не получается, но, думаю, истина где-то рядом. Если у меня получится написать такого бота — отпишусь.

Картинка




Заключение


Вот так я провел одну бессонную ночь.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.