├── .gitignore ├── README.md └── coupon ├── __init__.py ├── cookie.txt └── main.py /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | >博客地址——[Python脚本实现抢券](http://blog.csdn.net/white_idiot/article/details/78385441) 2 | 3 | # 参数获取 4 | 5 | 要实现发送请求抢券,需要获取券的`URL`,并定制请求头`Request Headers` 6 | 7 | 下面所有参数都来自Chrome的开发者工具。大多浏览器都有开发者工具,可以按需选择 8 | 9 | 准备步骤: 10 | 11 | 1. 登录网站 12 | 2. 进入抢券页面 13 | 3. 打开开发者工具(Chrome的快捷键是F12) 14 | 4. 切换到Network栏 15 | 16 | ![](http://upload-images.jianshu.io/upload_images/2482101-0cb61f096e57f9cf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 17 | 18 | ## 获取券的URL 19 | 20 | 在上面准备步骤的基础上,点击想要抢的券,这时`Name`栏底部会出现一个新的链接,点击这个链接,而我们需要的参数就来自`Header`中 21 | 22 | 复制`Request URL` 23 | 24 | ``` 25 | https://act-jshop.jd.com/couponSend.html? ...... 26 | ``` 27 | 28 | ![](http://upload-images.jianshu.io/upload_images/2482101-0568fcfc9128cd54.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 29 | 30 | ## 获取Cookie 31 | 32 | 也是在上面这个页面中,下翻在`Request Header`中,有一个`Cookie`的参数,复制下来 33 | 34 | ``` 35 | ipLoc-djd=1-72-2799-0; ipLocation=%u5317%u4EAC; areaId=1; ...... 36 | ``` 37 | 38 | ![](http://upload-images.jianshu.io/upload_images/2482101-f65ea39c17d73c2a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 39 | 40 | ## 获取券的Referer 41 | 42 | 同上,复制`Referer`参数 43 | 44 | ``` 45 | https://sale.jd.com/act/hznk5FbYfOTiEp.html 46 | ``` 47 | 48 | # 运行 49 | 50 | 直接在命令行运行 51 | 52 | ``` 53 | python main.py 54 | ``` 55 | 56 | ![](http://upload-images.jianshu.io/upload_images/2482101-16e1c54f95521402.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 57 | 58 | 看见上面这几个字气不气??? 59 | 60 | # 后记 61 | 62 | 终于抢到券了,但是。。。 63 | 64 | 最后一天突然券的数量变多了,完全不用抢 65 | 66 | 这。。。骗子! 67 | 68 | ![](http://upload-images.jianshu.io/upload_images/2482101-ab1d7c9baf852edc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 69 | 70 | 不过看到这行字还是挺开心的 71 | 72 | 有些时候要同时抢几张券,所以把参数改成了列表 73 | 74 | ``` 75 | # 券的URL 76 | 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"] 77 | 78 | # 券的Referer 79 | referers = ["https://sale.jd.com/act/bD1USlOE8n.html","https://sale.jd.com/act/bD1USlOE8n.html"] 80 | 81 | # 如果到预定时间就开始发送请求,然后打印结果 82 | if now == scheduled_time: 83 | for i in range(len(requestUrls)): 84 | session.headers['Referer'] = referers[i] 85 | r = session.get(requestUrls[i]) 86 | print(r.text) 87 | break 88 | ``` 89 | 90 | ![](http://upload-images.jianshu.io/upload_images/2482101-3332eb610d1baf4e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 91 | 92 | -------------------------------------------------------------------------------- /coupon/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/widiot/coupon/6afa6019ceb1499d9ae9e49a1af4dfce5dd1203a/coupon/__init__.py -------------------------------------------------------------------------------- /coupon/cookie.txt: -------------------------------------------------------------------------------- 1 | ipLocation=%u5317%u4EAC; __jdv=122270672|direct|-|none|-|1508932525145; user-key=43446cfd-f936-40dc-9428-612d203d8d04; cn=0; wlfstk_smdl=pzvp57robpcf41d2xig78anhdqyk89my; _jrda=1; _jrdb=1510055547970; TrackID=1yGaLovOCE8I9EqYqpzxPhmqLwRrn6fObJwkeMYCbEIa1us3mKPkyONb1IQbMgN00iHGkC_PrUxAQlk9dd6QQvQpV9Pd3Tw_D7EDreW6AD-leYQ0QjNvoOP0TvqGkilD6; pinId=YkLYa6JgaUkLIjNIV5hvHLV9-x-f3wj7; pin=jd_712d12eec1f0c; unick=widiot_; thor=BAF89059778BEB4A5E2B188C4092E986D240797572428F885A2A19DD9AA802A2FF0657754CFA8A6E5B90E8B0E6F038F0779EB48B8885B8BBC482CD5BD9073B782ABD2AAB56C4BB551C5B79289C1851061F65339A33E5ED855E1009760FC500354475B0B6836FA8E9FA3A4E78118C77D160D1933DC5F2C31D7911F0B92F1D67DA66BBC64396123013D80FA1348C8D6C53B1637E5EEEEF2942C8033CDEA9A096D7; _tp=svq2G4WrZq9zn%2BsSMKj5sy%2F7%2FLjnlO5q8byaNlcHDx4%3D; _pst=jd_712d12eec1f0c; ceshi3.com=103; __jda=122270672.1507441334159624141374.1507441334.1510042769.1510055481.15; __jdb=122270672.8.1507441334159624141374|15.1510055481; __jdc=122270672; 3AB9D23F7A4B3C9B=H7YLJQPIEYGREEQK7446ZHUS6D3YATUS7HCE5D7C25AY35FBFAPAFQBH63DHOYU342ENYIOLS5KKYTNGDQAMN6GDWM; __jdu=1507441334159624141374 2 | -------------------------------------------------------------------------------- /coupon/main.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import datetime 3 | 4 | # 抢券的时间 5 | scheduled_time = "2017-11-07 22:00" 6 | # 券的URL 7 | requestUrls = ["https://act-jshop.jd.com/couponSend.html?callback=jQuery8299904&roleId=8875111&key=a9185b7963d74999bdfde0ab214b31bb&_=1510062919603","https://act-jshop.jd.com/couponSend.html?callback=jQuery9197213&roleId=8817197&key=7b9cef8b76f64c3ba2474e810382d69b&_=1510062967022"] 8 | # 券的Referer 9 | referers = ["https://sale.jd.com/act/bD1USlOE8n.html","https://sale.jd.com/act/bD1USlOE8n.html"] 10 | # 浏览器及版本 11 | user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' 12 | 13 | 14 | # 将cookie转为字典 15 | def get_cookie(): 16 | with open("cookie.txt") as f: 17 | cookies = {} 18 | for line in f.read().split(';'): 19 | name, value = line.strip().split('=', 1) 20 | cookies[name] = value 21 | return cookies 22 | 23 | 24 | # 配置Session的参数 25 | session = requests.Session() 26 | session.headers['User-Agent'] = user_agent 27 | session.cookies = requests.utils.cookiejar_from_dict(get_cookie()) 28 | 29 | 30 | # 开始抢券 31 | def getCoupon(): 32 | print('等待抢券中......') 33 | while (True): 34 | # 当前时间 35 | now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') 36 | 37 | # 如果到预定时间就开始发送请求,然后打印结果 38 | if now == scheduled_time: 39 | for i in range(len(requestUrls)): 40 | session.headers['Referer'] = referers[i] 41 | r = session.get(requestUrls[i]) 42 | print(r.text) 43 | break 44 | 45 | 46 | if __name__ == '__main__': 47 | getCoupon() 48 | --------------------------------------------------------------------------------