Ето как с помощта на Python и Selenium си осигурих доживотна доставка на чеснова пица

Оригиналът е на Sanjeet Chatterjee

8
5548

Историята на един гладен студент с пъргав ум

Не знам как е при вас, но аз обожавам пицата. Особено много харесвам чесновата пица на Papa John’s. Ето защо изпаднах в истински възторг, когато след като си поръчах поредната пица за вкъщи, получих следното писмо:

Papa John’s (с) Заглавието на писмото съдържащо анкета

Безплатна храна! Със сигурност трябва да прегледам и да попълня тази анкета.

Анкетата

Papa John’s (с) Последната страница на анкетата

Приключих с анкетата като всеки нормален човек и получих кода, с който мога да си взема една безплатна чеснова пица. Взех си я, но познайте какво се случи, когато се опитах да вмъкна леко променения код, който получих. Изскочи нова анкета с награда нова безплатна пица.

Бих могъл да правя това вечно! Само че това съвсем не е най-ефикасното използване на моето време, така че нека да приложим малко Selenium магия.

Ботът

Selenium Webdriver е фреймуърк за автоматизация на действията в браузъра, който се използва предимно за различни тестове. Избрах Python като език за програмиране, който да използвам в този случай и реших да се пробвам да създам с помощта на Selenium бот за попълването на тези анкети.

Инсталирането

В началото стартираме pip install selenium и pip install fake_useragent. Какво е user-agent? MDN документацията го определя по следния начин:

‘Хедъра на запитването User-Agent е ред от символи, даващ възможност на сървърите и мрежовите възли да идентифицират приложението, операционната система, провайдъра и/или версията на агента, изпратил това запитване’.

Стори ми се добра идея да разбъркам по случен начин това заглавие, за да заобиколя възможния механизъм за филтриране и обработка и това ще бъде fake_useragent.

Освен това, трябваше да изтегля ChromeDriver, за да мога да взаимодействам с браузъра 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 ботът отваря уеб страницата и започва да кликва с мишката. Добавих забавяне от една секунда между действията, за да може страницата да успее да се зареди и всичко да изглежда сякаш това се върши от реален човек.

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, за да мога да избера правилните елементи, върху които кликва ботът. Разбира се, поставях на Papa John’s оценка ‘5 звезди’ по всички пунктове.

Вие сте добре дошли!

И ето, че най-накрая изкарах кода за валидацията:

Papa John’s (с) Последната страница на анкетата
driver.find_element_by_id('NextButton').click()
time.sleep(1)

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

Този програмен код извлича кода за получаването на пица

Празнуването

След половин час програмиране python ботът бе готов. Ето оттук можете да вземете целия сорс код, а ето и клипа, показващ бота в действие:

Благодаря, Papa John’s

Въведох всички генерирани кодове при плащането на виртуалната количка на Papa John’s. И това е – готов е потенциално безкрайния запас от чеснови пици.

Безплатна пица за мен и отлични отзиви за маркетинговия отдел на Papa John’s. Перфектната комбинация! За да направя този бот се наложи да изуча XPath и да усъвършенствам своите умения в Selenium.

Разбира се, аз нищо не поръчах. Като един честен човек уведомих Papa John’s за тази уязвимост заедно с клипа, който е доказателството за успешната работа на бота. Докато пишех тези редове, все още нямаше отговор. Но този номер в анкетата вече не минава и мисля, че там са получили моето съобщение.

Между другото, бих могъл да програмирам поръчката на 1000 чеснови пици от всеки магазин на Papa John’s навсякъде във Великобритания и сам самичък да докарам веригата Papa John’s до безумие. Навярно можете да си представите какъв хаос би възникнал.

А може би съм направил всичко това в една паралелна вселена.

4 7 гласа
Оценете статията
Абонирай се
Извести ме за
guest
8 Коментара
стари
нови оценка
Отзиви
Всички коментари