L'histoire d'un étudiant affamé à l'esprit curieux
Je ne sais pas pour vous, mais j'adore la pizza. Surtout si ce sont les bâtonnets de pizza à l'ail spéciaux de Papa John. Par conséquent, j'ai été ravi quand, après avoir commandé des plats à emporter, j'ai reçu la lettre suivante de leur part:
Papa John's (c) Titre de la lettre d'enquête
Nourriture gratuite! J'avais vraiment besoin de répondre à cette enquête ...
Entretien
Papa John's (c) Page de clôture de
l'enquête J'ai répondu à l'enquête en tant que personne normale et j'ai reçu un code de validation pour une pizza à l'ail gratuite.
Mais par curiosité, j'ai jeté un autre regard sur le lien. Il semble que le paramètre GUID était un ID client. Devinez ce qui s'est passé quand je l'ai changé en quelque chose d'aléatoire? Un tout nouveau sondage est apparu avec de nouveaux bâtonnets de pizza gratuits.
Je pourrais faire ça pour toujours! Mais ce n'est pas l'utilisation la plus efficace de mon temps, alors utilisons la magie du sélénium.
Le bot
Selenium Webdriver est un framework d'automatisation de navigateur qui est principalement utilisé pour les tests. J'ai choisi Python comme langage de programmation et j'ai décidé d'essayer Selenium pour créer un robot de sondage.
Installation
Tout d'abord, exécutez
pip install selenium
et pip install fake_useragent
. Qu'est-ce que l'agent utilisateur? La documentation MDN le définit comme suit:
L'en-tête de demande User-Agent est une chaîne qui permet aux serveurs et aux nœuds de réseau d'identifier l'application, le système d'exploitation, le fournisseur et / ou la version de l'agent qui a envoyé la demande.
Cela semblait être une bonne idée de randomiser cet en-tête pour contourner tout mécanisme de filtrage / blocage possible - c'est là que cela entre en jeu
fake_useragent
.
De plus, vous deviez télécharger le ChromeDriver pour interagir avec le navigateur Chrome.
Le code
La configuration de base de Selenium ressemble à ceci (initialisation avec un user-agent aléatoire):
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)
Après avoir randomisé le paramètre GUID, le bot ouvre une page Web et commence à cliquer. J'ai ajouté un deuxième délai entre les actions pour que la page ait le temps de se charger et de ressembler à une vraie personne.
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)
Une partie du script de bot
XPath
XPath est un langage de requête permettant de sélectionner des nœuds à partir d'un document HTML ou XML. Pour chacune des questions de l'enquête, j'ai utilisé un outil de test XPath en temps réel pour sélectionner les nœuds corrects sur lesquels le bot clique. Bien sûr, j'ai donné les 5 étoiles de Papa John sur tous les plans.
Test XPath
De rien!
Enfin, nous obtenons le code de validation.
Papa John's (c) La dernière page de l'enquête
driver.find_element_by_id('NextButton').click()
time.sleep(1)
code = driver.find_element_by_class_name('ValCode').get_attribute("innerHTML").split(' ')[2]
Extraire le code de validation
Fête
Après une demi-heure de programmation, le bot python était prêt. Voici l' essentiel du code, et le voici en action:
Merci, Papa John's
J'ai saisi tous les codes générés lors du calcul dans le panier de Papa John. Et le voici - une réserve potentiellement infinie de bâtonnets de pizza à l'ail.
Pizza gratuite pour moi et bonnes critiques pour Papa John's Marketing. On dirait une situation gagnant-gagnant! Pour ce bot, j'ai même dû apprendre XPath et perfectionner mes compétences Selenium.
Bien sûr, je n'ai rien commandé. En tant que personne honnête, j'ai informé Papa John's de la vulnérabilité avec des preuves vidéo. Au moment d'écrire ces lignes, ils n'ont pas répondu. Mais le sondage ne fonctionne plus, donc je pense qu'ils ont compris le message.
En passant, je pourrais programmer pour commander 1000 pizzas à l'ail dans tous les magasins Papa John's du Royaume-Uni et conduire à lui seul la chaîne de Papa John dans la folie. Pouvez-vous imaginer ce que serait le chaos?
J'ai peut-être fait cela dans un univers parallèle.