Источник: Nuances of Programming
Не знаю как вы, а я обожаю пиццу, особенно вместе с чесночными палочками от «Папа Джонс». И когда мне пришло это сообщение после последнего заказа, я был на седьмом небе от счастья:
Бесплатная еда! Я должен пройти этот опрос…
Опрос
Я ответил на их вопросы, как и обычно, и, разумеется, получил промокод на бесплатные чесночные палочки.
Но из-за своей любопытности я решил взглянуть на оригинальную ссылку. Казалось, что параметры GUID походили на идентификатор клиента. И знаете что произошло, когда я внес туда случайные данные. Появился абсолютно новый опросник, и оставалось лишь пройти его и получить ещё больше пицц-палочек.
Я мог делать так вечно! Но это не очень эффективно, поэтому добавим-ка немного магии Selenium.
Бот
Selenium Webdriver — это инструмент для автоматизации веб-браузера, который в первую очередь применяется для тестирования.
Установка
Я начал с команды pip install selenium и pip install fake_useragent. Агент пользователя (User-Agent)? Что это? MDN Web docs определяет его так:
Заголовок запроса User-Agent — это строка, позволяющая серверам и сайтам определять название, версию приложения и операционную систему агента пользователя, отправившего запрос.
Кажется, идея хорошая — сделать случайный подбор заголовка запроса, чтобы обойти установленные механизмы фильтрации и блокировки. И в этом нам поможет fake_useragent.
Также нужно скачать Chrome Driverдля соединения с Chrome.
Код
Обычная установка Selenium происходит так (с уже проделанной инициализацией, применяя случайную генерацию user-agent):
После генерирования случайных параметров GUID бот открывает веб-страницу и начинает прощёлкивать её. Добавляем задержку в 1–2 секунды, чтобы страница успевала прогрузиться и бот казался обычным человеком.
XPath — это язык запросов к элементам HTML или XML документа. Для каждого вопроса из опросника я тестировал XPath в режиме реального времени, чтобы бот нажимал на правильный ответ. Разумеется, я поставил 5 звезд «Папа Джонс» за всё.
Пожалуйста!
И, наконец, мы получили код подтверждения:
Пированье
Полчаса программирования и мой Python бот готов. Ниже Gist с кодом и как он работает:
Спасибо «Папа Джонс»!
Я ввёл все промокоды, и вот он — бесконечный запас чесночных пицц-палочек
Я получаю бесплатную чесночную пиццу, а маркетинговый отдел «Папа Джонс» — прекрасные отзывы, думаю беспроигрышный вариант для меня! Я даже выучил XPath и опробовал свои знания Selenium пока делал все это.
Но, конечно же, я не стал заказывать. Вместо этого, как порядочный человек, я сообщил «Папа Джонс» об этой лазейке и отправил видеодоказательство. На момент написания этой статьи они ещё не ответили, однако сама анкета больше не работает, поэтому полагаю, что они получили сообщение.
К слову, с прагматической точки зрения я мог бы заказать 1000 чесночных пицц в каждом филиале «Папа Джонс» по всей Британии и собственноручно взбесить их. Представьте какой хаос произошел бы.
Возможно, я сделал это в параллельной вселенной.
Читайте также:
Перевод статьи Sanjeet Chatterjee: How I Used Python and Selenium To Get a Lifetime Supply of Garlic Pizza Sticks