A história de um estudante faminto com uma mente curiosa
Não sei sobre você, mas adoro pizza. Especialmente se forem os palitos de pizza de alho especiais do Papa John. Portanto, fiquei muito feliz quando, após pedir comida para viagem, recebi a seguinte carta deles:

Papa John's (c) Título da carta de pesquisa
Comida grátis! Eu definitivamente precisava responder a esta pesquisa ...
Entrevista

Página de encerramento
da pesquisa de Papa John (c) Concluí a pesquisa como uma pessoa normal e recebi um código de validação para uma pizza de alho grátis.
Mas por curiosidade, dei outra olhada no link. Parece que o parâmetro GUID era um ID de cliente. Adivinha o que aconteceu quando mudei para algo aleatório? Uma nova pesquisa apareceu com novos palitos de pizza grátis.
Eu poderia fazer isso para sempre! Mas este não é o uso mais eficiente do meu tempo, então vamos usar um pouco da magia do selênio.
O bot
Selenium Webdriver é uma estrutura de automação de navegador usada principalmente para testes. Eu escolhi Python como minha linguagem de programação e decidi tentar Selenium para criar um bot de votação.
Instalação
Primeiro, corra
pip install selenium
e pip install fake_useragent
. O que é user-agent? A documentação MDN o define da seguinte forma:
O cabeçalho da solicitação User-Agent é uma string que permite aos servidores e nós de rede identificar o aplicativo, sistema operacional, fornecedor e / ou versão do agente que enviou a solicitação.
Pareceu uma boa ideia randomizar esse cabeçalho para contornar qualquer mecanismo de filtragem / bloqueio possível - é aí que entra
fake_useragent
.
Além disso, você tinha que baixar o ChromeDriver para interagir com o navegador Chrome.
O código
A configuração básica do Selenium se parece com isto (inicialização com agente de usuário aleatório):
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)
Depois de randomizar o parâmetro GUID, o bot abre uma página da web e começa a clicar. Eu adicionei um segundo atraso entre as ações para que a página tenha tempo de carregar e parecer uma pessoa 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 do script do bot
XPath
XPath é uma linguagem de consulta para selecionar nós de um documento HTML ou XML. Para cada uma das perguntas da pesquisa, usei uma ferramenta de teste XPath em tempo real para selecionar os nós corretos em que o bot clica. Claro, eu dei 5 estrelas do Papa John em todas as contagens.

Teste XPath
Seja bem-vindo!
Finalmente, obtemos o código de validação.

Papa John's (c) Página final da pesquisa
driver.find_element_by_id('NextButton').click()
time.sleep(1)
code = driver.find_element_by_class_name('ValCode').get_attribute("innerHTML").split(' ')[2]
Extraindo o código de validação
Celebração
Depois de meia hora de programação, o bot python estava pronto. Esta é a essência do código e aqui está em ação:
Obrigado, Papa John's
Entrei todos os códigos gerados durante o cálculo no carrinho de compras do Papa John. E aqui está - um suprimento potencialmente infinito de palitos de pizza de alho.
Pizza grátis para mim e ótimas críticas para o Marketing do Papa John. Parece uma situação ganha-ganha! Para este bot, eu até tive que aprender XPath e aprimorar minhas habilidades de Selenium.

Claro que não pedi nada. Como uma pessoa honesta, notifiquei Papa John's da vulnerabilidade junto com evidências de vídeo. No momento da redação deste artigo, eles não responderam. Mas a enquete não funciona mais, então acho que eles entenderam a mensagem.
A propósito, eu poderia programar um pedido de 1000 pizzas de alho em todas as lojas do Papa John's no Reino Unido e sozinho levar a rede do Papa John's à loucura. Você pode imaginar o caos que seria?
Posso ter feito isso em um universo paralelo.