Wie ich mit Python und Selen einen lebenslangen Vorrat an Knoblauchpizza bekam

Die Geschichte eines hungrigen Studenten mit einem forschenden Geist



Ich weiß nichts über dich, aber ich liebe Pizza. Besonders wenn es Papa Johns spezielle Knoblauchpizzasticks sind. Daher freute ich mich sehr, als ich nach der Bestellung von Essen zum Mitnehmen den folgenden Brief von ihnen erhielt:





Papa Johns (c) Überschrift des Umfragebriefs



Kostenloses Essen! Ich musste unbedingt an dieser Umfrage teilnehmen ...



Interview





Papa Johns (c) Abschlussseite



der Umfrage Ich habe die Umfrage als normale Person abgeschlossen und einen Validierungscode für eine kostenlose Knoblauchpizza erhalten.



Aber aus Neugier habe ich mir den Link noch einmal angesehen. Der GUID-Parameter war anscheinend eine Client-ID. Ratet mal, was passiert ist, als ich es in etwas Zufälliges geändert habe? Eine brandneue Umfrage mit neuen kostenlosen Pizzasticks erschien.



Ich könnte das für immer tun! Aber dies ist nicht die effizienteste Nutzung meiner Zeit, also lasst uns etwas Selenmagie verwenden.



Der Bot



Selenium Webdriver  ist ein Browser-Automatisierungsframework, das hauptsächlich zum Testen verwendet wird. Ich wählte Python als meine Programmiersprache und beschloss, Selenium auszuprobieren, um einen Polling-Bot zu erstellen.



Installation



Zuerst laufen pip install seleniumund pip install fake_useragent. Was ist User-Agent? Die MDN-Dokumentation definiert es wie folgt:



Der User-Agent-Anforderungsheader ist eine Zeichenfolge, mit der Server und Netzwerkknoten die Anwendung, das Betriebssystem, den Hersteller und / oder die Version des Agenten identifizieren können, der die Anforderung gesendet hat.


Es schien eine gute Idee zu sein, diesen Header zufällig zu sortieren, um mögliche Filter- / Blockierungsmechanismen zu umgehen - hier kommt er ins Spiel fake_useragent.



Außerdem mussten Sie den ChromeDriver herunterladen, um mit dem Chrome-Browser zu interagieren.



Der Code



Das grundlegende Selenium-Setup sieht folgendermaßen aus (Initialisierung mit einem zufälligen Benutzeragenten):



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)


Nach dem Randomisieren des GUID-Parameters öffnet der Bot eine Webseite und beginnt mit dem Klicken. Ich habe eine zweite Verzögerung zwischen den Aktionen hinzugefügt, damit die Seite Zeit zum Laden hat und wie eine echte Person aussieht.



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)


Teil des Bot-Skripts



XPath



XPath ist eine Abfragesprache zum Auswählen von Knoten aus einem HTML- oder XML-Dokument. Für jede der Umfragefragen habe ich ein Echtzeit-XPath-Testtool verwendet , um die richtigen Knoten auszuwählen, auf die der Bot klickt. Natürlich habe ich Papa Johns 5 Sterne in jeder Hinsicht gegeben.





XPath-Tests



Immer gerne!



Schließlich erhalten wir den Validierungscode.





Papa Johns (c) Die letzte Seite der Umfrage



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

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


Extrahieren des Validierungscodes



Feier



Nach einer halben Stunde Programmierung war der Python-Bot fertig. Hier ist ein Kern mit Code, und hier ist es in Aktion:





Danke, Papa John



Ich habe alle generierten Codes bei der Berechnung in Papa Johns Warenkorb eingegeben. Und hier ist es - ein potenziell endloser Vorrat an Knoblauch-Pizzasticks.



Kostenlose Pizza für mich und tolle Bewertungen für Papa Johns Marketing. Scheint eine Win-Win-Situation zu sein! Für diesen Bot musste ich sogar XPath lernen und meine Selenium-Fähigkeiten verbessern.







Natürlich habe ich nichts bestellt. Als ehrliche Person habe ich Papa John's zusammen mit Videobeweisen über die Sicherheitslücke informiert. Zum jetzigen Zeitpunkt haben sie nicht geantwortet. Aber die Umfrage funktioniert nicht mehr, also denke ich, dass sie die Nachricht verstanden haben.



Übrigens könnte ich programmieren, 1000 Knoblauchpizzas in jedem Geschäft von Papa John in ganz Großbritannien zu bestellen und Papa Johns Kette im Alleingang in den Wahnsinn zu treiben. Können Sie sich vorstellen, wie das Chaos aussehen würde?



Ich könnte dies in einem Paralleluniversum getan haben.



All Articles