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

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 до безумие. Навярно можете да си представите какъв хаос би възникнал.
А може би съм направил всичко това в една паралелна вселена.
Всичко важно от света на технологиите, директно в пощата ти.
С абонирането приемате нашите Условия и Политика за поверителност. Може да се отпишете с един клик по всяко време.
Коментирайте статията в нашите Форуми. За да научите първи най-важното, харесайте страницата ни във Facebook, и ни последвайте в Google Новини, TikTok, Telegram и Viber или изтеглете приложението на Kaldata.com за Android, iPhone, Huawei, Google Chrome, Microsoft Edge и Opera!

