项目已经上传到 GitHub —— coupon

某东双十一,图书有优惠券,早上十点抢,瞬间没了,很气。直接用了一个暴(hen)力(sha)的方法,仅供学习Requests

1. 参数获取

要实现发送请求抢券,需要获取券的URL,并定制请求头Request Headers

下面所有参数都来自Chrome的开发者工具。大多浏览器都有开发者工具,可以按需选择。

准备步骤:

  1. 登录网站
  2. 进入抢券页面
  3. 打开开发者工具(Chrome的快捷键是F12)
  4. 切换到Network栏

1.1 获取券的URL

在上面准备步骤的基础上,点击想要抢的券,这时Name栏底部会出现一个新的链接,点击这个链接,而我们需要的参数就来自Header中。

复制Request URL

https://act-jshop.jd.com/couponSend.html? ......

1.2 获取Cookie

也是在上面这个页面中,下翻在Request Header中,有一个Cookie的参数,复制下来:

ipLoc-djd=1-72-2799-0; ipLocation=%u5317%u4EAC; areaId=1; ......

1.3 获取券的Referer

同上,复制Referer参数:

https://sale.jd.com/act/hznk5FbYfOTiEp.html

2. Requests模块

对于Requests模块的深入学习,直接去翻文档,这里只举例说明一些抢券程序需要使用的方法。

2.1 get方法

导入Requests模块:

>>> import requests

尝试获取某个网页。本例子中,我们来获取Github的公共时间线:

>>> r = requests.get('https://github.com/timeline.json')

现在有一个名为rResponse对象。可以从这个对象中获取相应内容:

>>> r.text
u'[{"repository":{"open_issues":0,"url":"https://github.com/...

如果你想为请求添加HTTP头部,只要简单地传递一个dictheaders参数就可以了。

例如,指定User-Agent

>>> url = 'https://api.github.com/some/endpoint'
>>> headers = {'User-Agent': 'Mozilla/5.0'}
>>> r = requests.get(url, headers=headers)

2.2 会话对象Session

会话对象让你能够跨请求保持某些参数。它也会在同一个Session实例发出的所有请求之间保持cookie

我们来跨请求保持一些cookie

s = requests.Session()
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get("http://httpbin.org/cookies")
print(r.text)
# '{"cookies": {"sessioncookie": "123456789"}}'

会话也可用来为请求方法提供缺省数据。这是通过为会话对象的属性提供数据来实现的:

s = requests.Session()
s.auth = ('user', 'pass')
s.headers.update({'x-test': 'true'})
# both 'x-test' and 'x-test2' are sent
s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})

任何你传递给请求方法的字典都会与已设置会话层数据合并。方法层的参数覆盖会话的参数。

不过需要注意,就算使用了会话,方法级别的参数也不会被跨请求保持。下面的例子只会和第一个请求发送cookie,而非第二个:

s = requests.Session()r = s.get('http://httpbin.org/cookies', cookies={'from-my': 'browser'})
print(r.text)
# '{"cookies": {"from-my": "browser"}}'r = s.get('http://httpbin.org/cookies')
print(r.text)
# '{"cookies": {}}'

如果你要手动为会话添加 cookie,就使用Cookie utility函数:

session.cookies = cjrequests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True)

这个函数把一个字典转为CookieJar并返回,我们再把这个CookieJar设置给Session

3. 脚本实现

目录结构:

coupon/__init__.pycookie.txtmain.py

1.将复制的cookie复制到cookie.txt文件中

ipLoc-djd=1-72-2799-0; ipLocation=%u5317%u4EAC; areaId=1; ......

2.写一个把cookie.txt转为字典的函数

def get_cookie():with open("cookie.txt") as f:cookies={}for line in f.read().split(';'):name,value=line.strip().split('=',1)cookies[name]=valuereturn cookies

2.配置参数

user_agent = 'Mozilla/5.0 ......'
couponUrl = 'https://act-jshop.jd.com/couponSend.html? ......'
referer = 'https://sale.jd.com/act/hznk5FbYfOTiEp.html'

4.声明一个Session对象,并将参数赋值给他

session = requests.Session()
session.headers['User-Agent'] = user_agent
session.headers['Referer'] = referer
session.cookies = requests.utils.cookiejar_from_dict(get_cookie())

5.设置一个while(True)的循环,将预定时间和当前时间比较,如果相等,就发送请求

while (True):# 当前时间now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M')# 如果到预定时间就开始发送请求,然后打印结果if now == scheduled_time:r = session.get(couponUrl)print(r.text)break

4. 完整代码

把关键代码贴一下:

import requests
import datetime# 抢券的时间
scheduled_time = "2017-10-29 14:38"
# 券的URL
couponUrl = "https://act-jshop.jd.com/couponSend.html?callback=jQuery3358743&roleId=8620885&key=b832a574abe84874b960c056c3ac6c6d&_=1509248591553"
# 券的Referer
referer = "https://sale.jd.com/act/hznk5FbYfOTiEp.html"
# 浏览器及版本
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'# 将cookie转为字典
def get_cookie():with open("cookie.txt") as f:cookies = {}for line in f.read().split(';'):name, value = line.strip().split('=', 1)cookies[name] = valuereturn cookies# 配置Session的参数
session = requests.Session()
session.headers['User-Agent'] = user_agent
session.headers['Referer'] = referer
session.cookies = requests.utils.cookiejar_from_dict(get_cookie())# 开始抢券
def getCoupon():print('等待抢券中......')while (True):# 当前时间now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M')# 如果到预定时间就开始发送请求,然后打印结果if now == scheduled_time:r = session.get(couponUrl)print(r.text)breakif __name__ == '__main__':getCoupon()

5. 运行

直接在命令行运行:

python main.py

结果如下图:

看见上面这几个字气不气???

6. 后记

终于抢到券了,但是。。。

最后一天突然券的数量变多了,完全不用抢!!!

这。。。骗子!!!

不过看到这行字还是挺开心的。。。

有些时候要同时抢几张券,所以把参数改成了列表:

# 券的URL
requestUrls = ["https://act-jshop.jd.com/couponSend.html?callback=jQuery2891171&roleId=8781460&key=48b40c64619a4bc9a3912c98d5a94fed&_=1510055639531","https://act-jshop.jd.com/couponSend.html?callback=jQuery6218594&roleId=8725660&key=a606cfe7c5b045d1b5e58b43a59fd9b1&_=1510056463018"]# 券的Referer
referers = ["https://sale.jd.com/act/bD1USlOE8n.html","https://sale.jd.com/act/bD1USlOE8n.html"]# 如果到预定时间就开始发送请求,然后打印结果if now == scheduled_time:for i in range(len(requestUrls)):session.headers['Referer'] = referers[i]r = session.get(requestUrls[i])print(r.text)break

抢多张券的结果如下:

不过还是抢不过那些专业抢券的人,据说人家是好几十万的电脑,再用加速器选一个距离近的节点,那我等凡人只能欣赏code:16

【Python】Python脚本实现抢券相关推荐

  1. 如何使用python抢优惠券-Python写一个京东抢券脚本

    最近看到京东图书每天有优惠券发放,满200减100,诱惑还是蛮大的.反正自己抢不到,想着写个脚本试试. 几个关键步骤 获取优惠券的url 直接审查元素 获取cookie 通过本地代理,比如BurpSu ...

  2. python抢券代码_用Python写一个京东抢券脚本

    #coding:utf-8 #import scrapy from selenium import webdriver import time import datetime class JDQUAN ...

  3. 如何使用python编程抢京东优惠券 知乎_618!python京东 PC 版抢券程序

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:python技术 PS:如有需要Python学习资料的小伙伴可以加点 ...

  4. 618!python京东 PC 版抢券程序

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:python技术 PS:如有需要Python学习资料的小伙伴可以加点 ...

  5. python模拟微信登陆抢券

    目标 抓取微信消息,过滤到我们想要的券的网址,并模拟微信点击.(由于网友的手速太快了,真的抢不到,所以萌生了作弊的想法) 实现 itchat(http://itchat.readthedocs.io/ ...

  6. python抢券代码_京东python抢券脚本Python内置函数——str

    www.002pc.com对<京东python抢券脚本Python内置函数--str>总结来说,为我们学习Python很实用. str[code]str([object]) 转换为stri ...

  7. python脚本抢优惠券_Python写京东抢券小工具

    这是一个可以帮助我们抢券的小工具.不一定能抢到,只是增加了概率. 首先我们需要安装python环境 这里我们选用Anaconda,它可以方便的管理python包和环境. 下载地址https://www ...

  8. python京东预约抢购_Python参考代码:京东抢券脚本

    一.参数获取 要实现发送请求抢券,需要获取券的URL,并定制请求头Request Headers,下面所有参数都来自Chrome的开发者工具.大多浏览器都有开发者工具,可以按需选择. 准备步骤:登录网 ...

  9. chatgpt赋能python:如何用Python抢券?

    如何用Python抢券? 如果你是一个网购达人,你一定知道,有时候一些折扣券或者优惠码是非常有用的.但是,很多时候这些优惠码数量有限,而且很多人都会去抢购,最后的结果就是很多人都抢不到.这时,有些人可 ...

最新文章

  1. 又一个神器!只需一行代码,纯文本秒变Markdown
  2. html 拖拽坐标,Html+css实现拖拽导航条
  3. python小老鼠编程_成都python函数学习教程,Python编写课程
  4. leetcode —— 200. 岛屿数量
  5. 解析事件总线的4种实现方式
  6. jBPM Designer 2.4.0.Final版发布
  7. 施耐德 m340 编程手册_施耐德变频器学习之参数配置
  8. UltraEdit 注册机
  9. 计算机二级ppt没弄内容,计算机二级office考试中PPT母版知识考察点有哪些
  10. mod() SQL中取余的函数
  11. Matlab 绘制 - 点和向量:向量加减的方法和源码
  12. 学做智能车--电磁探究篇
  13. 50EX全球化战略布局加快,日韩版本将上线
  14. php tp5修改语句,tp5修改(实现即点即改)
  15. 清华大学宣布成立人工智能研究院 张钹担任院长
  16. Word如何快速设置多级标题并生成目录
  17. 解析压敏电阻与TVS管的性能对比,谁能更胜一筹?
  18. 利用html 和css模仿必应搜索主页。(一)
  19. 为什么要学习 Linux?
  20. 国内银行应用软件项目外包模式探讨

热门文章

  1. 发布DCWriter电子病历文本编辑器
  2. CSP-S 2019 考前复习日记
  3. 课件(Part 1, PJ)
  4. 平面广告设计接单之前应该要做什么准备?
  5. python计算学生平均年龄_不能理解平均年龄的计算
  6. verilog中$signed()的使用
  7. 一步一步实现500px引导动画 -- 酷酷哒
  8. mysql 视图会走索引吗_MySQL视图索引与存储过程精析-阿里云开发者社区
  9. 没想到cnblog也有月经贴,其实C#值不值钱不重要。
  10. 使用MindStudio的HPO界面工具进行调优