不限量蒜香披萨,Python和Selenium能帮我获得


全文共2297字 , 预计学习时长6分钟
不限量蒜香披萨,Python和Selenium能帮我获得
本文插图
图源:unsplash
我喜欢吃披萨 , 特别是棒约翰的蒜香披萨棒 , 它简直太美味了 。 恰好就在我吃完了披萨的外卖后 , 我收到了棒约翰发来的邮件 , 一瞬间我欣喜若狂!
免费的披萨!我一定要完成这个调查……
不限量蒜香披萨,Python和Selenium能帮我获得
本文插图
图源:棒约翰的问卷邮件内附图
调查
我以普通受访者的视角完成了调查 , 然后得到了一份免费蒜香披萨的兑换码 。
故事到这里本来应该结束了 。 但出于好奇 , 我又看了下原始邮件链接 。 该链接地址中的GUID参数似乎是一个客户标识符 。 如果我把它随机变个花样会发生什么?出现了一个全新的调查问卷 , 等待着更多人完成 , 然后送给他们免费的披萨棒 。
我可以一直这样做!然而 , 这似乎不是一个利用时间的高效方式——让我们使用一些Selenium魔法 。
不限量蒜香披萨,Python和Selenium能帮我获得
本文插图
棒约翰的反馈调查
机器人程序
Selenium Webdriver是一个浏览器自动化框架 , 主要用于测试 。 我选择Python作为我的编程语言 , 并使用Selenium来制作调查机器人 。
设置
我运行了pip install selenium和pip install fake_useragent来开始操作 。
什么是用户代理?MDN网络文档对其的定义是:User-Agent请求头是一个特征字符串 , 允许服务器和网络对等方识别请求用户代理的应用程序、操作系统、供应商和的版本 。
为了避免可能存在的任何过滤/阻塞机制 , 随机化这个请求头是个不错的方式——这就是fake_useragent的功能所在 。 我还需要下载ChromeDriver , 以便与Chrome浏览器实现交互 。
代码
基本的Selenium设置如下(使用随机的用户代理进行初始化):
from fake_useragent importUserAgent from selenium import webdriver from random import randrange import time ua =UserAgent(verify_ssl=False) user_agent = ua.random print(''USERAGENT: ''+ 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测试工具来选择机器人程序要单击的正确节点 。 当然 , 我给棒约翰的每样产品都打了五星 。
不限量蒜香披萨,Python和Selenium能帮我获得
本文插图
XPath 测试
最终 , 我们有了披萨兑换码!不用谢!
不限量蒜香披萨,Python和Selenium能帮我获得
本文插图
棒约翰反馈调查
driver.find_element_by_id('NextButton').click() time.sleep(1) code = driver.find_element_by_class_name('ValCode').get_attribute(''innerHTML'').split(' ')[2]提取验证码