我如何使用Python和Selenium终生供应大蒜比萨

一个有求知欲的饥饿学生的故事



我不认识你,但我喜欢披萨。特别是如果这是约翰爸爸的特殊蒜味比萨饼。因此,当我订购外卖食品后,收到他们的以下来信时,我感到非常高兴:





帕帕·约翰(c)调查信的标题



免费食物!我绝对需要参加这项调查...



面试





帕帕·约翰(Papa John)(c)的调查结束页面



我以正常人的身份完成了调查,并获得了免费大蒜披萨的验证码。



但是出于好奇,我再次查看了该链接。看起来GUID参数是一个客户端ID。猜猜我将其更改为随机变量时会发生什么?一个崭新的民意调查突然出现,上面有新的免费比萨饼。



我可以永远做到这一点!但这不是我时间最有效的利用方式,所以让我们使用一些硒魔术。



机器人



Selenium Webdriver 是主要用于测试的浏览器自动化框架。我选择Python作为我的编程语言,并决定尝试使用Selenium构建一个轮询机器人。



安装



首先,运行pip install seleniumpip install fake_useragent什么是用户代理?MDN文档对其定义如下:



User-Agent请求标头是一个字符串,它允许服务器和网络节点标识发送请求的应用程序,操作系统,供应商和/或代理的版本。


将这个标头随机化以绕过任何可能的过滤/阻止机制似乎是一个好主意-这就是它的用处fake_useragent



此外,您必须下载ChromeDriver才能与Chrome浏览器进行交互。



代码



Selenium的基本设置如下所示(使用随机用户代理初始化):



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测试工具来选择漫游器单击的正确节点。当然,我在所有方面都给了约翰爸爸5颗星。





XPath测试



别客气!



最后,我们获得验证码。





爸爸约翰(c)调查的最后一页



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的购物车中进行计算时,我输入了所有生成的代码。这就是-潜在的大蒜比萨饼无休止的供应。



对我来说免费披萨,对约翰爸爸的市场也很好评。似乎是双赢的局面!对于这个机器人,我什至必须学习XPath并磨练我的Selenium技能。







当然,我什么都没点。作为一个诚实的人,我已将该漏洞以及视频证据通知了Papa John's。截至撰写本文时,他们尚未答复。但是民意调查不再有效,所以我认为他们已经明白了。



顺便说一句,我可以计划从英国各地的每一家约翰爸爸商店订购1000个大蒜比萨饼,并一手把他的连锁店推向疯狂。你能想象会发生什么混乱吗?



我可能在平行宇宙中做到了这一点。



All Articles