Программирование
Как я использовал Python и Selenium, чтобы бесплатно получить пожизненный запас хлебных палочек от Папа Джонс
Сказка про любопытного и голодного студента.
Не знаю, как вы, но я люблю пиццу. Особенно, когда эта пицца идет с чесночными палочками от Папа Джонс. Поэтому я был в восторге, когда после недавней покупки получил от них следующее письмо:
Папа Джонс бесплатно раздает еду! Мне точно нужно заполнить анкету…
Опрос
Я прошел опрос как обычный человек и, конечно же, получил код подтверждения для получения бесплатных палочек.
Но из любопытства я еще раз взглянул на исходную ссылку. Похоже, что параметр GUID был идентификатором клиента. Угадайте, что случилось, когда я изменил его на что-то случайное? Появился новый опрос, ожидающий завершения и получения новых хлебных палочек.
Я мог бы делать это вечно! Однако это не казалось эффективным использованием моего времени — давайте внесем немного магии Selenium.
Хлебные палочки бесплатно от Папа Джонс: бот
Selenium Webdriver — это фреймворк автоматизации, который в основном используется для целей тестирования. Я использовал Python и решил использовать Selenium для создания бота для прохождения опросов.
Настройка
Я запустил pip install selenium & pip install fake_useragent, чтобы начать. Что такое пользовательский агент? В веб-документации MDN это определяется как:
Заголовок запроса User-Agent — это характерная строка, которая позволяет серверам и сетевым узлам идентифицировать приложение, операционную систему, поставщика и/или версию запрашивающего пользовательского агента.
Казалось хорошей идеей рандомизировать этот заголовок запроса, чтобы обойти любой механизм фильтрации/блокировки, который может существовать — вот где вступает в дело fake_useragent.
Мне также нужно было загрузить ChromeDriver, чтобы взаимодействовать с браузером Chrome.
Код
Базовая настройка Selenium выглядит следующим образом (инициализация выполняется с использованием случайного пользовательского агента):
from fake_useragent import UserAgent | |
from selenium import webdriver | |
from random import randrange | |
import time | |
ua = UserAgent(verify_ssl=False) | |
user_agent = ua.random | |
print("USER AGENT: " + user_agent) | |
chrome_options = webdriver.ChromeOptions() | |
chrome_options.add_argument("user-agent=" + user_agent) | |
driver = webdriver.Chrome(chrome_options=chrome_options) |
После рандомизации параметра GUID бот открывает веб-страницу и начинает кликать. Я добавил задержку в одну секунду между каждым действием, чтобы страница могла загрузиться, а также чтобы вести себя примерно как нормальный человек.
id = randrange(100000000000000) | |
url = "https://www.papajohnsfeedback.com/GBR?GUID=" + str(id) | |
print(url) | |
driver.get(url) | |
time.sleep(1) | |
driver.find_element_by_id('NextButton').click() | |
time.sleep(1) | |
driver.find_element_by_id('NextButton').click() | |
time.sleep(1) | |
driver.find_element_by_xpath("//div[contains(@class, 'Opt1')]/span").click() | |
time.sleep(1) |
XPath
XPath — это язык запросов для выбора узлов из документа HTML или XML. Для каждого из вопросов опроса я использовал инструмент тестирования XPath в реальном времени, чтобы выбрать правильный узел, на который должен щелкнуть бот. Конечно, я дал Папа Джонс оценку в 5 звезд за все.
Да на здоровье!
И, наконец, у нас есть код.
driver.find_element_by_id('NextButton').click() | |
time.sleep(1) | |
code = driver.find_element_by_class_name('ValCode').get_attribute("innerHTML").split(' ')[2] |
Праздник к нам приходит
После получаса программирования я закончил свой Python-бот. Вот суть, содержащая код, и вот он в действии:
Спасибо, Папа Джонс
Я ввел каждый из сгенерированных кодов на сайте. И вот он — потенциально бесконечный запас хлебных палочек.
Хлеб бесплатно от Папа Джонс для меня и отличные отзывы для отдела маркетинга компании. Мне кажется, что это беспроигрышная ситуация! Мне даже пришлось изучить XPath и отточить свои навыки работы с Selenium в процессе.
Но я, конечно, не заказывал их все. Как честный человек, я вместо этого уведомил Папа Джонс об этой лазейке вместе с proof-of-concept видео — но на момент написания статьи они не ответили. Однако опрос больше не работает, так что я думаю, они получили сообщение.
Кстати, я мог бы программно заказать 1000 чесночных пицц в каждой из пиццерий Papa John’s по всей Великобритании и в одиночку довести Papa John’s до безумия. Вы можете представить себе хаос, который приключился бы?
Может быть я сделал это в какой-либо из параллельных вселенных.
Спасибо за прочтение.
-
Новости4 недели назад
Видео и подкасты о мобильной разработке 2025.11
-
Новости1 неделя назад
Видео и подкасты о мобильной разработке 2025.14
-
Видео и подкасты для разработчиков3 недели назад
Javascript для бэкенда – отличная идея: Node.js, NPM, Typescript
-
Новости3 недели назад
Видео и подкасты о мобильной разработке 2025.12