Битва трендов: React vs Angular vs Vue



Книга Битва трендов: React vs Angular vs Vue

Не знаю как вы, а я обожаю пиццу, особенно вместе с чесночными палочками от «Папа Джонс». И когда мне пришло это сообщение после последнего заказа, я был на седьмом небе от счастья:


“Пройди наш опросник и получи бесплатные чесночные пицца-палочки или картофельные шарики на следующий онлайн заказ!” 

Бесплатная еда! Я должен пройти этот опрос…


Опрос



Я ответил на их вопросы, как и обычно, и, разумеется, получил промокод на бесплатные чесночные палочки.


Но из-за своей любопытности я решил взглянуть на оригинальную ссылку. Казалось, что параметры 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):


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 бот открывает веб-страницу и начинает прощёлкивать её. Добавляем задержку в 1–2 секунды, чтобы страница успевала прогрузиться и бот казался обычным человеком.


// Часть скрипта для бота

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  —  это язык запросов к элементам HTML или XML документа. Для каждого вопроса из опросника я тестировал XPath в режиме реального времени, чтобы бот нажимал на правильный ответ. Разумеется, я поставил 5 звезд «Папа Джонс» за всё.


Тестирование XPath

Пожалуйста!


И, наконец, мы получили код подтверждения:


«Папа Джонс» © Ответ на опрос

// Извлечение кода подтверждения

driver.find_element_by_id('NextButton').click()
time.sleep(1)

code = driver.find_element_by_class_name('ValCode').get_attribute("innerHTML").split(' ')[2]

Пированье


Полчаса программирования и мой Python бот готов. Ниже Gist с кодом и как он работает:





Спасибо «Папа Джонс»!


Я ввёл все промокоды, и вот он  —  бесконечный запас чесночных пицц-палочек


Я получаю бесплатную чесночную пиццу, а маркетинговый отдел «Папа Джонс»  —  прекрасные отзывы, думаю беспроигрышный вариант для меня! Я даже выучил XPath и опробовал свои знания Selenium пока делал все это.


“Папа Джонс” © Оформление заказа

Но, конечно же, я не стал заказывать. Вместо этого, как порядочный человек, я сообщил «Папа Джонс» об этой лазейке и отправил видеодоказательство. На момент написания этой статьи они ещё не ответили, однако сама анкета больше не работает, поэтому полагаю, что они получили сообщение.


К слову, с прагматической точки зрения я мог бы заказать 1000 чесночных пицц в каждом филиале «Папа Джонс» по всей Британии и собственноручно взбесить их. Представьте какой хаос произошел бы.


Возможно, я сделал это в параллельной вселенной.


826   0  

Comments

    Ничего не найдено.