Cómo obtuve un suministro de por vida de pizza de ajo usando Python y Selenium

La historia de un estudiante hambriento con una mente inquisitiva



No sé ustedes, pero me encanta la pizza. Especialmente si se trata de palitos de pizza de ajo especiales de Papa John. Por lo tanto, quedé encantado cuando, después de pedir comida para llevar, recibí la siguiente carta de ellos:





Papa John's (c) Título de la carta de la encuesta



¡Comida gratis! Definitivamente necesitaba realizar esta encuesta ...



Entrevista





Página de cierre de



la encuesta de Papa John's (c) Completé la encuesta como una persona normal y recibí un código de validación para una pizza de ajo gratis.



Pero por curiosidad, volví a mirar el enlace. Parece que el parámetro GUID era un ID de cliente. ¿Adivina qué pasó cuando lo cambié a algo aleatorio? Apareció una nueva encuesta con nuevos palitos de pizza gratis.



¡Podría hacer esto para siempre! Pero este no es el uso más eficiente de mi tiempo, así que usemos un poco de magia de selenio.



El bot



Selenium Webdriver  es un marco de automatización del navegador que se utiliza principalmente para realizar pruebas. Elegí Python como mi lenguaje de programación y decidí probar Selenium para crear un robot de sondeo.



Instalación



Primero, ejecute pip install seleniumy pip install fake_useragent. ¿Qué es user-agent? La documentación de MDN lo define de la siguiente manera:



El encabezado de solicitud de usuario-agente es una cadena que permite a los servidores y nodos de red identificar la aplicación, el sistema operativo, el proveedor y / o la versión del agente que envió la solicitud.


Parecía una buena idea aleatorizar este encabezado para evitar cualquier posible mecanismo de filtrado / bloqueo; ahí es donde entra en juego fake_useragent.



Además, tenía que descargar ChromeDriver para interactuar con el navegador Chrome.



El código



La configuración básica de Selenium se ve así (inicialización con agente de usuario aleatorio):



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)


Después de aleatorizar el parámetro GUID, el bot abre una página web y comienza a hacer clic. Agregué un segundo retraso entre acciones para que la página tenga tiempo de cargarse y se vea como una persona real.



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)


Parte del script del bot



XPath



XPath es un lenguaje de consulta para seleccionar nodos de un documento HTML o XML. Para cada una de las preguntas de la encuesta, utilicé una herramienta de prueba XPath en tiempo real para seleccionar los nodos correctos en los que hace clic el bot. Por supuesto, le di a Papa John's 5 estrellas en todos los aspectos.





Prueba XPath



¡De nada!



Finalmente, obtenemos el código de validación.





Papa John's (c) La página final de la encuesta



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

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


Extrayendo el código de validación



Celebracion



Después de media hora de programación, el bot de Python estaba listo. Aquí hay una esencia con el código, y aquí está en acción:





Gracias Papa John's



Ingresé todos los códigos generados al calcular en el carrito de compras de Papa John. Y aquí está: un suministro potencialmente interminable de palitos de pizza de ajo.



Pizza gratis para mí y excelentes críticas para Papa John's Marketing. ¡Parece una situación en la que todos ganan! Para este bot, incluso tuve que aprender XPath y perfeccionar mis habilidades con Selenium.







Por supuesto, no ordené nada. Como persona honesta, le he notificado a Papa John's sobre la vulnerabilidad junto con pruebas de video. Al momento de escribir estas líneas, no han respondido. Pero la encuesta ya no funciona, así que creo que captaron el mensaje.



Por cierto, podría programar para pedir 1000 pizzas de ajo en todas las tiendas de Papa John's en todo el Reino Unido y, sin ayuda, llevar a la cadena de Papa John a la locura. ¿Puedes imaginar el caos que sería?



Puede que haya hecho esto en un universo paralelo.



All Articles