ganlinhao пре 6 година
комит
bc3f7d2de3
10 измењених фајлова са 925 додато и 0 уклоњено
  1. 46 0
      README.md
  2. 37 0
      config.ini
  3. 22 0
      config.py
  4. 340 0
      jdBuyMask.log
  5. 275 0
      jd_mask_spider_requests.py
  6. 21 0
      jdlogger.py
  7. 25 0
      main.py
  8. 23 0
      test.py
  9. 21 0
      timer.py
  10. 115 0
      util.py

+ 46 - 0
README.md

@@ -0,0 +1,46 @@
+# Jd_mask[如果可以点下右上角的star给颗小星星呗谢谢]
+# 因为最近忙于换工作的原因,此代码不会再更新.等后面618之类的活动此代码会再更新.而且一直没来回复issues,各位大佬不好意思.告辞!
+
+##### 此tool只单独支持预约-抢购-成功后直接提交订单的商品.[口罩],只提供学习参考用途.!
+
+##### 此代码基于原作者https://github.com/tychxn/jd-assistan 进行修改合并
+
+##### 非常感谢原作者https://github.com/tychxn/jd-assistant 提供的代码
+[![star, issue](https://img.shields.io/badge/star%2C%20issue-welcome-brightgreen.svg)](https://github.com/zhou-xiaojun/jd_mask)
+
+## 主要功能
+
+- 登陆京东商城([www.jd.com](http://www.jd.com/))
+  - cookies登录 (需要自己手动获取)
+- 预约商品
+  - 定时自动预约
+- 秒杀预约后等待抢购的商品
+  - 定时开始自动抢购
+
+## 运行环境
+
+- [Python 3](https://www.python.org/)
+
+## 第三方库
+
+- [Requests](http://docs.python-requests.org/en/master/)
+
+## 使用教程
+
+程序主入口在 `main.py`
+
+在config.ini文件填入config里面对应的内容
+eid,和fp找个普通商品随便下单,然后抓包就能看到,这两个值可以填固定的
+cookies_string,sku_id,DEFAULT_USER_AGENT(和cookie获取同一个地方就会看到.直接复制进去就可以了),以上都是必填的.
+
+启动时按照提示操作输入需要的功能即可
+
+## 更新记录
+
+- 【2020.02.24】新增微信推送,去除了冗余代码,进行模块化处理.
+
+## 备注
+
+- 关于时间的设置,我测试成功的2次都是设置了整点获取抢购连接失败一次后1s再获取成功,后面试过测试了2次0.6s的反而不行,会出现请求获取订单参数超时导致报错.网络好的可以试一下设置0.5s左右的误差
+- 本来时间不足,加上一天只能测试一次.而且网络不稳定.只抢购成功2次.而且都是数量1,我记得有几个口罩不能设置数量,只能抢购1个,所以要注意这点.
+- 代码在`macOS`中编写,如果在其他平台上运行出行问题,欢迎提issue。

+ 37 - 0
config.ini

@@ -0,0 +1,37 @@
+[config]
+# eid, fp参数必须填写,具体请参考 wiki-常见问题
+# 随意填写可能导致订单无法提交等问题
+eid = "XMKWG35OFYBQN3C5JYD7J4FNOWNXSGBIZNIKBUVVQEMJW6766KKTNYZD43U3Y7VCWA73EEWJRCOTKU7QVG3WKUNNQA"
+fp = "2ea01d1acb70ab62c8607786d7273205"
+# cookie
+cookies_String ="__jdu=1586273021865136663377; shshshfpa=1d79a82c-037d-8e4e-47cb-e35d2f9e66ae-1586273130; shshshfpb=ypTYIktPFs89QK5nxn8nGIw%3D%3D; unpl=V2_ZzNtbRYHRxZ1X0EBfktdDGIDEFoSUhccJlxHXHNOWAQ3V0YJclRCFnQUR1BnGlQUZwQZWEdcQRBFCEdkeB5fA2AFEFlBZxpFK0oYEDlNDEY1WnxdRF9DFnEAR1B9KWwGZzMSXHJXRxxyC0BWehpcDGAHEl9FUEQXdw5AZEsebDVXARpZR1NHJXQ4R2Q5TQAFbgUQXA9XRxxyC0BWehpcDGAHEl9FUEQXdw5AZHopXw%3d%3d; __jdv=76161171|haosou-search|t_262767352_haosousearch|cpc|1791259057_0_ea521f6d4c084136a4e8be099f50aeee|1590741875314; user-key=e7b2ce43-c8ea-498b-aa14-1d72ba811c3b; cn=14; ipLocation=%u5e7f%u897f; pinId=RKLv5CxPY3leYrbiqjD_zrV9-x-f3wj7; pin=243864730-341142; unick=%E8%9B%8B%E9%BB%84%E9%85%B1%E5%95%8A%E5%AE%9D%E5%AE%9D; ceshi3.com=201; _tp=G9fKS8tOq9vYWtFzoQL6S58tnu1J7NXnsaIj9rKmcI8%3D; _pst=243864730-341142; areaId=20; ipLoc-djd=20-1761-25188-0; TrackID=164w4EaXgdVB8pmGgufMvZxffVg93QU3DR1qoyUmb9AbFnt_XMZ4cCggrBVqxQbwH6Sq6wvHiQ0tfbjTM9Mez0AhaI61woZr-qrMvbKOsZZT67SVvoLrkZfKMAeezI4Xx; thor=721925D5F86146929EDB9E937057356EBD65E8075AF346CDA6DFD00A839FDAAE5B800AD469815047B419498006934452FA72C6513EDDC62E79BDBB5883B46087391FF3C8EE2E5C2246FA96BF54ADD140DF2918C35D29DCE2BE90D0FEBEE2263DEEE9DEE73277CFE2BC97AA575462FDE847C8209285C17235C0566829976AABB1BFDA92428C8EA169ADB615E06CB05003B543B48B7BD5F744BDED08A66B10D5D3; __jda=122270672.1586273021865136663377.1586273022.1591320625.1591667887.11; __jdc=122270672; 3AB9D23F7A4B3C9B=XMKWG35OFYBQN3C5JYD7J4FNOWNXSGBIZNIKBUVVQEMJW6766KKTNYZD43U3Y7VCWA73EEWJRCOTKU7QVG3WKUNNQA; __jdb=122270672.8.1586273021865136663377|11.1591667887; shshshfp=4d12604ada2ade89734b633f704fe848; shshshsID=b512228e41868a27ab8199eb73396a90_4_1591667938758"
+
+#cookies_String = "__jdu=1586273021865136663377; shshshfpa=1d79a82c-037d-8e4e-47cb-e35d2f9e66ae-1586273130; shshshfpb=ypTYIktPFs89QK5nxn8nGIw%3D%3D; ceshi3.com=201; unpl=V2_ZzNtbRYHRxZ1X0EBfktdDGIDEFoSUhccJlxHXHNOWAQ3V0YJclRCFnQUR1BnGlQUZwQZWEdcQRBFCEdkeB5fA2AFEFlBZxpFK0oYEDlNDEY1WnxdRF9DFnEAR1B9KWwGZzMSXHJXRxxyC0BWehpcDGAHEl9FUEQXdw5AZEsebDVXARpZR1NHJXQ4R2Q5TQAFbgUQXA9XRxxyC0BWehpcDGAHEl9FUEQXdw5AZHopXw%3d%3d; __jdv=76161171|haosou-search|t_262767352_haosousearch|cpc|1791259057_0_ea521f6d4c084136a4e8be099f50aeee|1590741875314; areaId=20; user-key=e7b2ce43-c8ea-498b-aa14-1d72ba811c3b; TrackID=14zpGGB-OpJ4mkipibzlKLH_cntpvRWi1YuLUjQQ9V-kkhdgGNzIYgnDptMlqfJhNhu8ozJ_qMXppTXszcg6uSBKf3xsYTd9LGMPVWn_V3mfk98AjllQ77oNoZNf0vk_n; pinId=tnz4f2JFgMgyIVQ1is9ieg; pin=275466402_m; unick=%E4%B8%8D%E6%83%B3%E8%B7%91%E6%AD%A5%E7%9A%84%E5%B9%B2%E9%94%85%E9%94%85; _tp=hbuicMy40IDnjEA3yKCYJg%3D%3D; _pst=275466402_m; __jda=122270672.1586273021865136663377.1586273022.1590741875.1590853863.6; __jdc=122270672; shshshfp=4502485e8b520f53be89fe44a27717ee; 3AB9D23F7A4B3C9B=XMKWG35OFYBQN3C5JYD7J4FNOWNXSGBIZNIKBUVVQEMJW6766KKTNYZD43U3Y7VCWA73EEWJRCOTKU7QVG3WKUNNQA; cn=14; ipLoc-djd=20-1761-25188-51466.2052701265; ipLocation=%u5e7f%u897f; __tak=c94559a7e3893645ee7f9f3ba3af391b4381d8e935b4895cf5f4df48e014c4aca54c30a40df88a95e670fcf3ef153823cfc92c013e7e892133119c9f79811f1b9303c52b4dffffebb6b145cbe13fc0e0; thor=A3006E40DFDA6A23E9353F8A5BE5D7B526D907891A33D2D63A28B4F6F19DC6F67E8BAA1251F8FC51DA54936D111277AEF79F42D5BBCA8C7F01068EA42B4B681CF3D78B4CB73DF9E870791980E609BABE4426FF4EF4089405842C640217A10FEC30256F6BC66C63C67D595F08AE093A375782F916DE74D980FE9E18720F2D5987B03269FB13DC923CCCEC51A5FD7155FD; shshshsID=b122acc455c4e500fe48a45f327cbeac_17_1590855792368; __jdb=122270672.25.1586273021865136663377|6.1590853863"
+# 商品id
+sku_id = 100012043978
+# 设定时间 # 2020-02-24 10:00:00.100000
+buy_time = 2020-06-09 10:00:00.150
+# 默认UA
+DEFAULT_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
+# 是否使用随机 useragent,默认为 false
+random_useragent = false
+
+#2020-06-09 09:59:53,330 INFO: 用户:蛋黄酱啊宝宝
+#2020-06-09 09:59:54,072 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+#2020-06-09 09:59:54,073 INFO: 正在等待到达设定时间:2020-06-09 10:00:00.150000
+#2020-06-09 10:00:00,617 INFO: 时间到达,开始执行……
+#2020-06-09 10:00:01,958 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=ce68546e7bd7529a57853feea8256ffc&from=pc
+#2020-06-09 10:00:01,960 INFO: 访问商品的抢购连接...
+#2020-06-09 10:00:02,376 INFO: 访问抢购订单结算页面...
+#2020-06-09 10:00:02,698 INFO: 生成提交抢购订单所需参数...
+#2020-06-09 10:00:02,699 INFO: 获取秒杀初始化信息...
+#2020-06-09 10:00:03,128 INFO: 提交抢购订单...
+#2020-06-09 10:00:03,395 INFO: 抢购失败,返回信息:{'errorMessage': '很遗憾没有抢到,再接再厉哦。', 'orderId': 0, 'resultCode': 90008, 'skuId': 0, 'success': False}
+
+
+[messenger]
+# 使用了Server酱的推送服务
+# 如果想开启下单成功后消息推送,则将 enable 设置为 true,默认为 false 不开启推送
+# 开启消息推送必须填入 sckey,如何获取请参考 http://sc.ftqq.com/3.version。感谢Server酱~
+enable = false
+sckey =

+ 22 - 0
config.py

@@ -0,0 +1,22 @@
+import os
+import configparser
+
+
+class Config(object):
+    def __init__(self, config_file='config.ini'):
+        self._path = os.path.join(os.getcwd(), config_file)
+        if not os.path.exists(self._path):
+            raise FileNotFoundError("No such file: config.ini")
+        self._config = configparser.ConfigParser()
+        self._config.read(self._path, encoding='utf-8-sig')
+        self._configRaw = configparser.RawConfigParser()
+        self._configRaw.read(self._path, encoding='utf-8-sig')
+
+    def get(self, section, name):
+        return self._config.get(section, name)
+
+    def getRaw(self, section, name):
+        return self._configRaw.get(section, name)
+
+
+global_config = Config()

+ 340 - 0
jdBuyMask.log

@@ -0,0 +1,340 @@
+2020-05-31 00:33:29,334 INFO: 校验是否登录[成功]
+2020-05-31 00:33:29,640 INFO: 用户:不想跑步的干锅锅
+2020-05-31 00:33:30,242 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-05-31 00:33:30,570 INFO: 正在等待到达设定时间:2018-09-28 22:45:50
+2020-05-31 00:33:30,570 INFO: 时间到达,开始执行……
+2020-05-31 00:33:30,972 INFO: 预约成功,已获得抢购资格 / 您已成功预约过了,无需重复预约
+2020-05-31 00:33:58,823 INFO: 用户:不想跑步的干锅锅
+2020-05-31 00:33:59,579 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-05-31 00:33:59,579 INFO: 正在等待到达设定时间:2018-09-28 22:45:50
+2020-05-31 00:33:59,579 INFO: 时间到达,开始执行……
+2020-05-31 00:34:00,815 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:34:02,113 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:34:03,421 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:34:04,699 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:34:05,962 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:34:07,209 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:34:08,450 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:34:09,694 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:34:10,942 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:35:47,071 INFO: 用户:不想跑步的干锅锅
+2020-05-31 00:35:47,673 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-05-31 00:35:47,673 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-05-31 00:46:17,790 INFO: 用户:不想跑步的干锅锅
+2020-05-31 00:46:18,375 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-05-31 00:46:18,375 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-05-31 00:46:52,873 INFO: 用户:不想跑步的干锅锅
+2020-05-31 00:46:53,404 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-05-31 00:46:53,971 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:46:55,214 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:46:56,471 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:46:57,748 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:46:59,004 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:47:00,346 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:47:01,642 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:47:02,974 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:47:04,275 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:47:05,538 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:47:06,868 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:47:08,122 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:47:09,389 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:47:10,670 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:48:14,368 INFO: 用户:不想跑步的干锅锅
+2020-05-31 00:48:14,987 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-05-31 00:48:15,611 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:48:16,364 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:48:17,116 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:48:17,870 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:48:18,618 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:48:19,363 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:48:20,141 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:48:21,249 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:48:22,010 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:48:22,789 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:48:23,539 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:48:24,292 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:48:26,859 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:48:27,625 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:48:28,398 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:48:29,143 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:48:30,117 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:48:31,869 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,1秒后重试
+2020-05-31 00:51:17,439 INFO: 用户:不想跑步的干锅锅
+2020-05-31 00:51:18,054 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-05-31 00:51:18,054 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-05-31 23:52:42,943 INFO: 用户:jd
+2020-05-31 23:52:43,428 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-05-31 23:52:43,429 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-06-01 00:00:00,318 INFO: 时间到达,开始执行……
+2020-06-01 00:00:01,651 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=7fd7bca428ed8ddbbaaef99f64814cb7&from=pc
+2020-06-01 00:00:01,652 INFO: 访问商品的抢购连接...
+2020-06-01 00:00:01,926 INFO: 访问抢购订单结算页面...
+2020-06-01 00:04:21,333 INFO: 用户:jd
+2020-06-01 00:04:22,780 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-01 00:04:22,780 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-06-01 00:04:22,780 INFO: 时间到达,开始执行……
+2020-06-01 00:04:24,086 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=7fd7bca428ed8ddbbaaef99f64814cb7&from=pc
+2020-06-01 00:04:24,086 INFO: 访问商品的抢购连接...
+2020-06-01 00:04:25,351 INFO: 访问抢购订单结算页面...
+2020-06-01 00:04:25,583 INFO: 生成提交抢购订单所需参数...
+2020-06-01 00:04:25,584 INFO: 获取秒杀初始化信息...
+2020-06-01 00:04:56,141 INFO: 用户:jd
+2020-06-01 00:04:56,608 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-01 00:04:56,608 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-06-01 00:04:56,609 INFO: 时间到达,开始执行……
+2020-06-01 00:04:56,829 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=7fd7bca428ed8ddbbaaef99f64814cb7&from=pc
+2020-06-01 00:04:56,829 INFO: 访问商品的抢购连接...
+2020-06-01 00:04:57,082 INFO: 访问抢购订单结算页面...
+2020-06-01 00:04:57,316 INFO: 生成提交抢购订单所需参数...
+2020-06-01 00:04:57,316 INFO: 获取秒杀初始化信息...
+2020-06-01 00:05:14,964 INFO: 用户:jd
+2020-06-01 00:05:15,438 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-01 00:05:15,438 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-06-01 00:05:15,439 INFO: 时间到达,开始执行……
+2020-06-01 00:05:15,690 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=7fd7bca428ed8ddbbaaef99f64814cb7&from=pc
+2020-06-01 00:05:15,690 INFO: 访问商品的抢购连接...
+2020-06-01 00:05:15,949 INFO: 访问抢购订单结算页面...
+2020-06-01 00:05:16,187 INFO: 生成提交抢购订单所需参数...
+2020-06-01 00:05:16,187 INFO: 获取秒杀初始化信息...
+2020-06-01 00:07:27,064 INFO: 用户:jd
+2020-06-01 00:07:27,532 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-01 00:07:27,532 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-06-01 00:07:27,532 INFO: 时间到达,开始执行……
+2020-06-01 00:07:27,852 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=7fd7bca428ed8ddbbaaef99f64814cb7&from=pc
+2020-06-01 00:07:27,853 INFO: 访问商品的抢购连接...
+2020-06-01 00:07:28,123 INFO: 访问抢购订单结算页面...
+2020-06-01 00:07:28,357 INFO: 生成提交抢购订单所需参数...
+2020-06-01 00:07:28,357 INFO: 获取秒杀初始化信息...
+2020-06-01 00:07:40,803 INFO: 用户:jd
+2020-06-01 00:07:41,262 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-01 00:07:41,262 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-06-01 00:07:41,262 INFO: 时间到达,开始执行……
+2020-06-01 00:07:41,488 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=7fd7bca428ed8ddbbaaef99f64814cb7&from=pc
+2020-06-01 00:07:41,488 INFO: 访问商品的抢购连接...
+2020-06-01 00:07:41,748 INFO: 访问抢购订单结算页面...
+2020-06-01 00:07:41,982 INFO: 生成提交抢购订单所需参数...
+2020-06-01 00:07:41,982 INFO: 获取秒杀初始化信息...
+2020-06-01 00:08:49,073 INFO: 用户:不想跑步的干锅锅
+2020-06-01 00:08:49,643 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-01 00:08:49,643 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-06-01 00:08:49,643 INFO: 时间到达,开始执行……
+2020-06-01 00:08:49,939 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=7fd7bca428ed8ddbbaaef99f64814cb7&from=pc
+2020-06-01 00:08:49,939 INFO: 访问商品的抢购连接...
+2020-06-01 00:08:50,212 INFO: 访问抢购订单结算页面...
+2020-06-01 00:08:50,491 INFO: 生成提交抢购订单所需参数...
+2020-06-01 00:08:50,599 INFO: 获取秒杀初始化信息...
+2020-06-01 00:08:50,942 INFO: 提交抢购订单...
+2020-06-01 00:08:51,431 INFO: 抢购成功,订单号:117251517078, 总价:1499.00, 电脑端付款链接:https://sko.jd.com/success/success.action?orderId=117251517078&rid=0.7214792536579143
+2020-06-01 00:10:08,987 INFO: 用户:不想跑步的干锅锅
+2020-06-01 00:10:09,504 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-01 00:10:09,504 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-06-01 00:10:09,504 INFO: 时间到达,开始执行……
+2020-06-01 00:10:10,844 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=7fd7bca428ed8ddbbaaef99f64814cb7&from=pc
+2020-06-01 00:10:10,844 INFO: 访问商品的抢购连接...
+2020-06-01 00:10:12,116 INFO: 访问抢购订单结算页面...
+2020-06-01 00:10:12,398 INFO: 生成提交抢购订单所需参数...
+2020-06-01 00:10:12,398 INFO: 获取秒杀初始化信息...
+2020-06-01 00:10:12,743 INFO: 提交抢购订单...
+2020-06-01 00:10:12,966 INFO: 抢购失败,返回信息:{'errorMessage': '很遗憾没有抢到,再接再厉哦。', 'orderId': 0, 'resultCode': 90013, 'skuId': 0, 'success': False}
+2020-06-01 00:17:21,095 INFO: 用户:不想跑步的干锅锅
+2020-06-01 00:17:22,609 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-01 00:17:22,609 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-06-01 00:17:22,609 INFO: 时间到达,开始执行……
+2020-06-01 00:17:35,855 INFO: 用户:不想跑步的干锅锅
+2020-06-01 00:17:36,365 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-01 00:17:36,366 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-06-01 00:17:36,366 INFO: 时间到达,开始执行……
+2020-06-01 00:17:36,585 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=7fd7bca428ed8ddbbaaef99f64814cb7&from=pc
+2020-06-01 00:17:36,585 INFO: 访问商品的抢购连接...
+2020-06-01 00:17:36,855 INFO: 访问抢购订单结算页面...
+2020-06-01 00:17:37,132 INFO: 生成提交抢购订单所需参数...
+2020-06-01 00:17:37,132 INFO: 获取秒杀初始化信息...
+2020-06-01 00:17:37,471 INFO: 提交抢购订单...
+2020-06-01 00:17:37,705 INFO: 抢购失败,返回信息:{'errorMessage': '很遗憾没有抢到,再接再厉哦。', 'orderId': 0, 'resultCode': 90013, 'skuId': 0, 'success': False}
+2020-06-01 00:17:54,170 INFO: 用户:不想跑步的干锅锅
+2020-06-01 00:17:54,608 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-01 00:17:54,608 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-06-01 00:17:54,608 INFO: 时间到达,开始执行……
+2020-06-01 00:17:54,837 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=7fd7bca428ed8ddbbaaef99f64814cb7&from=pc
+2020-06-01 00:17:54,838 INFO: 访问商品的抢购连接...
+2020-06-01 00:17:55,064 INFO: 访问抢购订单结算页面...
+2020-06-01 00:17:55,349 INFO: 生成提交抢购订单所需参数...
+2020-06-01 00:17:55,349 INFO: 获取秒杀初始化信息...
+2020-06-01 00:17:55,696 INFO: 提交抢购订单...
+2020-06-01 00:17:55,921 INFO: 抢购失败,返回信息:{'errorMessage': '很遗憾没有抢到,再接再厉哦。', 'orderId': 0, 'resultCode': 90013, 'skuId': 0, 'success': False}
+2020-06-01 00:20:24,975 INFO: 用户:不想跑步的干锅锅
+2020-06-01 00:20:25,475 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-01 00:20:25,475 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-06-01 00:20:25,476 INFO: 时间到达,开始执行……
+2020-06-01 00:20:26,901 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=7fd7bca428ed8ddbbaaef99f64814cb7&from=pc
+2020-06-01 00:20:26,904 INFO: 访问商品的抢购连接...
+2020-06-01 00:20:27,168 INFO: 访问抢购订单结算页面...
+2020-06-01 00:20:27,448 INFO: 生成提交抢购订单所需参数...
+2020-06-01 00:20:27,448 INFO: 获取秒杀初始化信息...
+2020-06-01 00:20:27,796 INFO: 提交抢购订单...
+2020-06-01 00:20:28,039 INFO: 抢购失败,返回信息:{'errorMessage': '很遗憾没有抢到,再接再厉哦。', 'orderId': 0, 'resultCode': 90013, 'skuId': 0, 'success': False}
+2020-06-01 00:22:26,753 INFO: 用户:不想跑步的干锅锅
+2020-06-01 00:22:27,544 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-01 00:22:27,544 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-06-01 00:22:27,544 INFO: 时间到达,开始执行……
+2020-06-01 00:22:30,290 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=7fd7bca428ed8ddbbaaef99f64814cb7&from=pc
+2020-06-01 00:22:30,290 INFO: 访问商品的抢购连接...
+2020-06-01 00:23:03,413 INFO: 用户:不想跑步的干锅锅
+2020-06-01 00:23:04,233 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-01 00:23:04,234 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-06-01 00:23:04,234 INFO: 时间到达,开始执行……
+2020-06-01 00:23:04,607 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=7fd7bca428ed8ddbbaaef99f64814cb7&from=pc
+2020-06-01 00:23:04,607 INFO: 访问商品的抢购连接...
+2020-06-01 00:23:05,676 INFO: 访问抢购订单结算页面...
+2020-06-01 00:23:06,203 INFO: 生成提交抢购订单所需参数...
+2020-06-01 00:23:06,203 INFO: 获取秒杀初始化信息...
+2020-06-01 00:24:54,786 INFO: 用户:不想跑步的干锅锅
+2020-06-01 00:24:56,465 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-01 00:24:56,465 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-06-01 00:24:56,465 INFO: 时间到达,开始执行……
+2020-06-01 00:25:15,959 INFO: 校验是否登录[失败]
+2020-06-01 00:25:15,959 INFO: 请重新输入cookie
+2020-06-01 00:25:17,385 INFO: 校验是否登录[失败]
+2020-06-01 00:25:17,385 INFO: 请重新输入cookie
+2020-06-01 00:26:54,425 INFO: 校验是否登录[成功]
+2020-06-01 00:26:56,030 INFO: 用户:蛋黄酱啊宝宝
+2020-06-01 00:27:04,558 INFO: 用户:蛋黄酱啊宝宝
+2020-06-01 00:27:05,589 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-01 00:27:05,590 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-06-01 00:27:05,590 INFO: 时间到达,开始执行……
+2020-06-01 00:27:07,225 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=4f858921bb3de73237d0ced4f6ff3a1d&from=pc
+2020-06-01 00:27:07,225 INFO: 访问商品的抢购连接...
+2020-06-01 00:27:07,752 INFO: 访问抢购订单结算页面...
+2020-06-01 00:27:08,214 INFO: 生成提交抢购订单所需参数...
+2020-06-01 00:27:08,214 INFO: 获取秒杀初始化信息...
+2020-06-01 00:27:08,727 INFO: 提交抢购订单...
+2020-06-01 00:27:09,048 INFO: 抢购失败,返回信息:{'errorMessage': '很遗憾没有抢到,再接再厉哦。', 'orderId': 0, 'resultCode': 90013, 'skuId': 0, 'success': False}
+2020-06-01 00:27:34,741 INFO: 用户:蛋黄酱啊宝宝
+2020-06-01 00:27:35,443 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-01 00:27:35,443 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-06-01 00:27:35,443 INFO: 时间到达,开始执行……
+2020-06-01 00:27:36,272 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=4f858921bb3de73237d0ced4f6ff3a1d&from=pc
+2020-06-01 00:27:36,272 INFO: 访问商品的抢购连接...
+2020-06-01 00:27:36,605 INFO: 访问抢购订单结算页面...
+2020-06-01 00:27:37,399 INFO: 生成提交抢购订单所需参数...
+2020-06-01 00:27:37,399 INFO: 获取秒杀初始化信息...
+2020-06-01 00:27:37,979 INFO: 提交抢购订单...
+2020-06-01 00:27:38,315 INFO: 抢购失败,返回信息:{'errorMessage': '很遗憾没有抢到,再接再厉哦。', 'orderId': 0, 'resultCode': 90008, 'skuId': 0, 'success': False}
+2020-06-01 23:37:38,753 INFO: 校验是否登录[成功]
+2020-06-01 23:37:39,153 INFO: 用户:蛋黄酱啊宝宝
+2020-06-01 23:37:42,757 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-01 23:37:43,268 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-06-01 23:37:43,269 INFO: 时间到达,开始执行……
+2020-06-01 23:37:44,406 INFO: 预约成功,已获得抢购资格 / 您已成功预约过了,无需重复预约
+2020-06-01 23:38:05,341 INFO: 用户:蛋黄酱啊宝宝
+2020-06-01 23:38:06,743 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-01 23:38:06,743 INFO: 正在等待到达设定时间:2020-06-01 00:00:00.100000
+2020-06-01 23:38:06,743 INFO: 时间到达,开始执行……
+2020-06-01 23:38:08,647 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-01 23:38:09,553 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-01 23:38:10,837 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-01 23:38:11,891 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-01 23:38:13,007 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-01 23:38:13,810 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-01 23:38:14,591 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-01 23:38:15,606 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-01 23:38:32,328 INFO: 用户:蛋黄酱啊宝宝
+2020-06-01 23:38:35,326 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-01 23:38:35,326 INFO: 正在等待到达设定时间:2020-06-02 00:00:00.100000
+2020-06-02 00:14:23,005 INFO: 时间到达,开始执行……
+2020-06-02 00:14:30,766 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-02 00:14:33,558 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-02 00:14:35,586 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-02 08:58:19,772 INFO: 校验是否登录[失败]
+2020-06-02 08:58:19,774 INFO: 请重新输入cookie
+2020-06-02 08:58:21,059 INFO: 校验是否登录[失败]
+2020-06-02 08:58:21,059 INFO: 请重新输入cookie
+2020-06-02 08:59:26,224 INFO: 校验是否登录[失败]
+2020-06-02 08:59:26,224 INFO: 请重新输入cookie
+2020-06-02 08:59:27,570 INFO: 校验是否登录[失败]
+2020-06-02 08:59:27,571 INFO: 请重新输入cookie
+2020-06-02 09:00:53,748 INFO: 校验是否登录[成功]
+2020-06-02 09:00:53,996 INFO: 用户:蛋黄酱啊宝宝
+2020-06-02 09:00:54,477 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-02 09:00:54,747 INFO: 正在等待到达设定时间:2020-06-02 00:00:00.100000
+2020-06-02 09:00:54,747 INFO: 时间到达,开始执行……
+2020-06-02 09:00:55,011 INFO: 预约成功,已获得抢购资格 / 您已成功预约过了,无需重复预约
+2020-06-02 09:00:59,842 INFO: 用户:蛋黄酱啊宝宝
+2020-06-02 09:01:00,569 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-02 09:01:00,569 INFO: 正在等待到达设定时间:2020-06-02 00:00:00.100000
+2020-06-02 09:01:00,569 INFO: 时间到达,开始执行……
+2020-06-02 09:01:02,158 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-02 09:01:02,945 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-02 09:01:03,724 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-02 09:01:04,574 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-02 09:01:05,362 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-02 09:01:06,167 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-02 09:01:06,959 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-02 09:01:07,825 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-02 09:01:08,682 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-02 09:01:09,559 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-02 09:01:10,349 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-02 09:01:11,162 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-02 09:01:15,707 INFO: 用户:蛋黄酱啊宝宝
+2020-06-02 09:01:16,398 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-02 09:01:16,398 INFO: 正在等待到达设定时间:2020-06-02 10:00:00.100000
+2020-06-02 10:00:00,180 INFO: 时间到达,开始执行……
+2020-06-02 10:00:00,623 INFO: 抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试
+2020-06-02 10:00:01,427 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=83568ac4ce5ca2ed686172fdefc1dca8&from=pc
+2020-06-02 10:00:01,427 INFO: 访问商品的抢购连接...
+2020-06-02 10:00:01,889 INFO: 访问抢购订单结算页面...
+2020-06-02 10:00:02,295 INFO: 生成提交抢购订单所需参数...
+2020-06-02 10:00:02,295 INFO: 获取秒杀初始化信息...
+2020-06-02 10:00:02,647 INFO: 提交抢购订单...
+2020-06-02 10:00:02,907 INFO: 抢购失败,返回信息:{'errorMessage': '很遗憾没有抢到,再接再厉哦。', 'orderId': 0, 'resultCode': 90008, 'skuId': 0, 'success': False}
+2020-06-05 09:30:59,445 INFO: 校验是否登录[失败]
+2020-06-05 09:30:59,447 INFO: 请重新输入cookie
+2020-06-05 09:31:00,678 INFO: 校验是否登录[失败]
+2020-06-05 09:31:00,678 INFO: 请重新输入cookie
+2020-06-05 09:32:02,037 INFO: 校验是否登录[成功]
+2020-06-05 09:32:02,307 INFO: 用户:蛋黄酱啊宝宝
+2020-06-05 09:32:02,868 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-05 09:32:03,129 INFO: 正在等待到达设定时间:2020-06-03 10:00:00.200000
+2020-06-05 09:32:03,129 INFO: 时间到达,开始执行……
+2020-06-05 09:32:03,428 INFO: 预约成功,已获得抢购资格 / 您已成功预约过了,无需重复预约
+2020-06-05 09:32:34,294 INFO: 用户:蛋黄酱啊宝宝
+2020-06-05 09:32:34,805 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-05 09:32:34,808 INFO: 正在等待到达设定时间:2020-06-05 10:00:00.150000
+2020-06-05 10:00:00,478 INFO: 时间到达,开始执行……
+2020-06-05 10:00:01,902 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=58479c4677b74d090d9d9f3429ab8417&from=pc
+2020-06-05 10:00:01,902 INFO: 访问商品的抢购连接...
+2020-06-05 10:00:02,169 INFO: 访问抢购订单结算页面...
+2020-06-05 10:00:02,462 INFO: 生成提交抢购订单所需参数...
+2020-06-05 10:00:02,463 INFO: 获取秒杀初始化信息...
+2020-06-05 10:01:35,133 INFO: 用户:蛋黄酱啊宝宝
+2020-06-05 10:01:35,679 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-05 10:01:35,679 INFO: 正在等待到达设定时间:2020-06-05 10:00:00.150000
+2020-06-05 10:01:35,680 INFO: 时间到达,开始执行……
+2020-06-05 10:01:36,098 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=58479c4677b74d090d9d9f3429ab8417&from=pc
+2020-06-05 10:01:36,098 INFO: 访问商品的抢购连接...
+2020-06-05 10:01:37,452 INFO: 访问抢购订单结算页面...
+2020-06-05 10:01:37,734 INFO: 生成提交抢购订单所需参数...
+2020-06-05 10:01:37,734 INFO: 获取秒杀初始化信息...
+2020-06-05 10:01:38,080 INFO: 提交抢购订单...
+2020-06-05 10:01:38,327 INFO: 抢购失败,返回信息:{'errorMessage': '很遗憾没有抢到,再接再厉哦。', 'orderId': 0, 'resultCode': 90008, 'skuId': 0, 'success': False}
+2020-06-09 09:57:55,943 INFO: 校验是否登录[失败]
+2020-06-09 09:57:55,944 INFO: 请重新输入cookie
+2020-06-09 09:57:57,470 INFO: 校验是否登录[失败]
+2020-06-09 09:57:57,470 INFO: 请重新输入cookie
+2020-06-09 09:59:36,921 INFO: 校验是否登录[成功]
+2020-06-09 09:59:37,204 INFO: 用户:蛋黄酱啊宝宝
+2020-06-09 09:59:37,804 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-09 09:59:38,115 INFO: 正在等待到达设定时间:2020-06-05 10:00:00.150000
+2020-06-09 09:59:38,115 INFO: 时间到达,开始执行……
+2020-06-09 09:59:38,423 INFO: 预约成功,已获得抢购资格 / 您已成功预约过了,无需重复预约
+2020-06-09 09:59:53,330 INFO: 用户:蛋黄酱啊宝宝
+2020-06-09 09:59:54,072 INFO: 商品名称:【茅台白酒】茅台 飞天 酱香型白酒 53度 500ml【行情 报价 价格 评测】-京东
+2020-06-09 09:59:54,073 INFO: 正在等待到达设定时间:2020-06-09 10:00:00.150000
+2020-06-09 10:00:00,617 INFO: 时间到达,开始执行……
+2020-06-09 10:00:01,958 INFO: 抢购链接获取成功: https://marathon.jd.com/captcha.html?skuId=100012043978&sn=ce68546e7bd7529a57853feea8256ffc&from=pc
+2020-06-09 10:00:01,960 INFO: 访问商品的抢购连接...
+2020-06-09 10:00:02,376 INFO: 访问抢购订单结算页面...
+2020-06-09 10:00:02,698 INFO: 生成提交抢购订单所需参数...
+2020-06-09 10:00:02,699 INFO: 获取秒杀初始化信息...
+2020-06-09 10:00:03,128 INFO: 提交抢购订单...
+2020-06-09 10:00:03,395 INFO: 抢购失败,返回信息:{'errorMessage': '很遗憾没有抢到,再接再厉哦。', 'orderId': 0, 'resultCode': 90008, 'skuId': 0, 'success': False}

+ 275 - 0
jd_mask_spider_requests.py

@@ -0,0 +1,275 @@
+import random
+import sys
+import time
+from jdlogger import logger
+from timer import Timer
+import requests
+from util import parse_json, get_session, get_sku_title,send_wechat
+from config import global_config
+
+
+class Jd_Mask_Spider(object):
+    def __init__(self):
+        # 初始化信息
+        self.session = get_session()
+        self.sku_id = global_config.getRaw('config', 'sku_id')
+        self.seckill_init_info = dict()
+        self.seckill_url = dict()
+        self.seckill_order_data = dict()
+        self.timers = Timer()
+        self.default_user_agent = global_config.getRaw('config', 'DEFAULT_USER_AGENT')
+
+    def login(self):
+        for flag in range(1, 3):
+            try:
+                targetURL = 'https://order.jd.com/center/list.action'
+                payload = {
+                    'rid': str(int(time.time() * 1000)),
+                }
+                resp = self.session.get(
+                    url=targetURL, params=payload, allow_redirects=False)
+                if resp.status_code == requests.codes.OK:
+                    logger.info('校验是否登录[成功]')
+                    logger.info('用户:{}'.format(self.get_username()))
+                    return True
+                else:
+                    logger.info('校验是否登录[失败]')
+                    logger.info('请重新输入cookie')
+                    time.sleep(1)
+                    continue
+            except Exception as e:
+                logger.info('第【%s】次失败请重新获取cookie', flag)
+                time.sleep(1)
+                continue
+        sys.exit(1)
+
+    def make_reserve(self):
+        """商品预约"""
+        logger.info('商品名称:{}'.format(get_sku_title()))
+        url = 'https://yushou.jd.com/youshouinfo.action?'
+        payload = {
+            'callback': 'fetchJSON',
+            'sku': self.sku_id,
+            '_': str(int(time.time() * 1000)),
+        }
+        headers = {
+            'User-Agent': self.default_user_agent,
+            'Referer': 'https://item.jd.com/{}.html'.format(self.sku_id),
+        }
+        resp = self.session.get(url=url, params=payload, headers=headers)
+        resp_json = parse_json(resp.text)
+        reserve_url = resp_json.get('url')
+        self.timers.start()
+        while True:
+            try:
+                self.session.get(url='https:' + reserve_url)
+                logger.info('预约成功,已获得抢购资格 / 您已成功预约过了,无需重复预约')
+                if global_config.getRaw('messenger', 'enable') == 'true':
+                    success_message = "预约成功,已获得抢购资格 / 您已成功预约过了,无需重复预约"
+                    send_wechat(success_message)
+                break
+            except Exception as e:
+                logger.error('预约失败正在重试...')
+
+    def get_username(self):
+        """获取用户信息"""
+        url = 'https://passport.jd.com/user/petName/getUserInfoForMiniJd.action'
+        payload = {
+            'callback': 'jQuery'.format(random.randint(1000000, 9999999)),
+            '_': str(int(time.time() * 1000)),
+        }
+        headers = {
+            'User-Agent': self.default_user_agent,
+            'Referer': 'https://order.jd.com/center/list.action',
+        }
+        try:
+            resp = self.session.get(url=url, params=payload, headers=headers)
+            resp_json = parse_json(resp.text)
+            # 响应中包含了许多用户信息,现在在其中返回昵称
+            # jQuery2381773({"imgUrl":"//storage.360buyimg.com/i.imageUpload/xxx.jpg","lastLoginTime":"","nickName":"xxx","plusStatus":"0","realName":"xxx","userLevel":x,"userScoreVO":{"accountScore":xx,"activityScore":xx,"consumptionScore":xxxxx,"default":false,"financeScore":xxx,"pin":"xxx","riskScore":x,"totalScore":xxxxx}})
+            return resp_json.get('nickName') or 'jd'
+        except Exception:
+            return 'jd'
+
+    def get_seckill_url(self):
+        """获取商品的抢购链接
+        点击"抢购"按钮后,会有两次302跳转,最后到达订单结算页面
+        这里返回第一次跳转后的页面url,作为商品的抢购链接
+        :return: 商品的抢购链接
+        """
+        url = 'https://itemko.jd.com/itemShowBtn'
+        payload = {
+            'callback': 'jQuery{}'.format(random.randint(1000000, 9999999)),
+            'skuId': self.sku_id,
+            'from': 'pc',
+            '_': str(int(time.time() * 1000)),
+        }
+        headers = {
+            'User-Agent': self.default_user_agent,
+            'Host': 'itemko.jd.com',
+            'Referer': 'https://item.jd.com/{}.html'.format(self.sku_id),
+        }
+        while True:
+            resp = self.session.get(url=url, headers=headers, params=payload)
+            resp_json = parse_json(resp.text)
+            if resp_json.get('url'):
+                # https://divide.jd.com/user_routing?skuId=8654289&sn=c3f4ececd8461f0e4d7267e96a91e0e0&from=pc
+                router_url = 'https:' + resp_json.get('url')
+                # https://marathon.jd.com/captcha.html?skuId=8654289&sn=c3f4ececd8461f0e4d7267e96a91e0e0&from=pc
+                seckill_url = router_url.replace(
+                    'divide', 'marathon').replace(
+                    'user_routing', 'captcha.html')
+                logger.info("抢购链接获取成功: %s", seckill_url)
+                return seckill_url
+            else:
+                logger.info("抢购链接获取失败,%s不是抢购商品或抢购页面暂未刷新,0.5秒后重试")
+                time.sleep(0.1)
+
+    def request_seckill_url(self):
+        """访问商品的抢购链接(用于设置cookie等"""
+        logger.info('用户:{}'.format(self.get_username()))
+        logger.info('商品名称:{}'.format(get_sku_title()))
+        self.timers.start()
+        self.seckill_url[self.sku_id] = self.get_seckill_url()
+        logger.info('访问商品的抢购连接...')
+        headers = {
+            'User-Agent': self.default_user_agent,
+            'Host': 'marathon.jd.com',
+            'Referer': 'https://item.jd.com/{}.html'.format(self.sku_id),
+        }
+        self.session.get(
+            url=self.seckill_url.get(
+                self.sku_id),
+            headers=headers,
+            allow_redirects=False)
+
+    def request_seckill_checkout_page(self):
+        """访问抢购订单结算页面"""
+        logger.info('访问抢购订单结算页面...')
+        url = 'https://marathon.jd.com/seckill/seckill.action'
+        payload = {
+            'skuId': self.sku_id,
+            'num': 2,
+            'rid': int(time.time())
+        }
+        headers = {
+            'User-Agent': self.default_user_agent,
+            'Host': 'marathon.jd.com',
+            'Referer': 'https://item.jd.com/{}.html'.format(self.sku_id),
+        }
+        self.session.get(url=url, params=payload, headers=headers, allow_redirects=False)
+
+    def _get_seckill_init_info(self):
+        """获取秒杀初始化信息(包括:地址,发票,token)
+        :return: 初始化信息组成的dict
+        """
+        logger.info('获取秒杀初始化信息...')
+        url = 'https://marathon.jd.com/seckillnew/orderService/pc/init.action'
+        data = {
+            'sku': self.sku_id,
+            'num': 1,
+            'isModifyAddress': 'false',
+        }
+        headers = {
+            'User-Agent': self.default_user_agent,
+            'Host': 'marathon.jd.com',
+        }
+        resp = self.session.post(url=url, data=data, headers=headers)
+        return parse_json(resp.text)
+
+    def _get_seckill_order_data(self):
+        """生成提交抢购订单所需的请求体参数
+        :return: 请求体参数组成的dict
+        """
+        logger.info('生成提交抢购订单所需参数...')
+        # 获取用户秒杀初始化信息
+        self.seckill_init_info[self.sku_id] = self._get_seckill_init_info()
+        init_info = self.seckill_init_info.get(self.sku_id)
+        default_address = init_info['addressList'][0]  # 默认地址dict
+        invoice_info = init_info.get('invoiceInfo', {})  # 默认发票信息dict, 有可能不返回
+        token = init_info['token']
+        data = {
+            'skuId': self.sku_id,
+            'num': 1,
+            'addressId': default_address['id'],
+            'yuShou': 'true',
+            'isModifyAddress': 'false',
+            'name': default_address['name'],
+            'provinceId': default_address['provinceId'],
+            'cityId': default_address['cityId'],
+            'countyId': default_address['countyId'],
+            'townId': default_address['townId'],
+            'addressDetail': default_address['addressDetail'],
+            'mobile': default_address['mobile'],
+            'mobileKey': default_address['mobileKey'],
+            'email': default_address.get('email', ''),
+            'postCode': '',
+            'invoiceTitle': invoice_info.get('invoiceTitle', -1),
+            'invoiceCompanyName': '',
+            'invoiceContent': invoice_info.get('invoiceContentType', 1),
+            'invoiceTaxpayerNO': '',
+            'invoiceEmail': '',
+            'invoicePhone': invoice_info.get('invoicePhone', ''),
+            'invoicePhoneKey': invoice_info.get('invoicePhoneKey', ''),
+            'invoice': 'true' if invoice_info else 'false',
+            'password': '',
+            'codTimeType': 3,
+            'paymentType': 4,
+            'areaCode': '',
+            'overseas': 0,
+            'phone': '',
+            'eid': global_config.getRaw('config', 'eid'),
+            'fp': global_config.getRaw('config', 'fp'),
+            'token': token,
+            'pru': ''
+        }
+        return data
+
+    def submit_seckill_order(self):
+        """提交抢购(秒杀)订单
+        :return: 抢购结果 True/False
+        """
+        url = 'https://marathon.jd.com/seckillnew/orderService/pc/submitOrder.action'
+        payload = {
+            'skuId': self.sku_id,
+        }
+        self.seckill_order_data[self.sku_id] = self._get_seckill_order_data(
+            )
+        logger.info('提交抢购订单...')
+        headers = {
+            'User-Agent': self.default_user_agent,
+            'Host': 'marathon.jd.com',
+            'Referer': 'https://marathon.jd.com/seckill/seckill.action?skuId={0}&num={1}&rid={2}'.format(
+                self.sku_id, 1, int(time.time())),
+        }
+        resp = self.session.post(
+            url=url,
+            params=payload,
+            data=self.seckill_order_data.get(
+                self.sku_id),
+            headers=headers)
+        resp_json = parse_json(resp.text)
+        # 返回信息
+        # 抢购失败:
+        # {'errorMessage': '很遗憾没有抢到,再接再厉哦。', 'orderId': 0, 'resultCode': 60074, 'skuId': 0, 'success': False}
+        # {'errorMessage': '抱歉,您提交过快,请稍后再提交订单!', 'orderId': 0, 'resultCode': 60017, 'skuId': 0, 'success': False}
+        # {'errorMessage': '系统正在开小差,请重试~~', 'orderId': 0, 'resultCode': 90013, 'skuId': 0, 'success': False}
+        # 抢购成功:
+        # {"appUrl":"xxxxx","orderId":820227xxxxx,"pcUrl":"xxxxx","resultCode":0,"skuId":0,"success":true,"totalMoney":"xxxxx"}
+        if resp_json.get('success'):
+            order_id = resp_json.get('orderId')
+            total_money = resp_json.get('totalMoney')
+            pay_url = 'https:' + resp_json.get('pcUrl')
+            logger.info(
+                '抢购成功,订单号:{}, 总价:{}, 电脑端付款链接:{}'.format(order_id,total_money,pay_url)
+                )
+            if global_config.getRaw('messenger', 'enable') == 'true':
+                success_message = "抢购成功,订单号:{}, 总价:{}, 电脑端付款链接:{}".format(order_id, total_money, pay_url)
+                send_wechat(success_message)
+            return True
+        else:
+            logger.info('抢购失败,返回信息:{}'.format(resp_json))
+            if global_config.getRaw('messenger', 'enable') == 'true':
+                error_message = '抢购失败,返回信息:{}'.format(resp_json)
+                send_wechat(error_message)
+            return False

+ 21 - 0
jdlogger.py

@@ -0,0 +1,21 @@
+import logging
+import logging.handlers
+'''
+日志模块
+'''
+LOG_FILENAME = 'jdBuyMask.log'
+logger = logging.getLogger()
+
+
+def set_logger():
+    logger.setLevel(logging.INFO)
+    formatter = logging.Formatter('%(asctime)s %(levelname)s: %(message)s')
+    console_handler = logging.StreamHandler()
+    console_handler.setFormatter(formatter)
+    logger.addHandler(console_handler)
+    file_handler = logging.handlers.RotatingFileHandler(
+        LOG_FILENAME, maxBytes=10485760, backupCount=5, encoding="utf-8")
+    file_handler.setFormatter(formatter)
+    logger.addHandler(file_handler)
+
+set_logger()

+ 25 - 0
main.py

@@ -0,0 +1,25 @@
+import sys
+from jd_mask_spider_requests import Jd_Mask_Spider
+
+if __name__ == '__main__':
+    a = """
+  ________   __    _ 
+ |___  /\ \ / /   | |
+    / /  \ V /    | |
+   / /    > < _   | |
+  / /__  / . \ |__| |1.预约商品
+ /_____|/_/ \_\____/ 2.秒杀抢购商品 
+    """
+    start_tool = Jd_Mask_Spider()
+    print(a)
+    choice_function = input('选择功能:')
+    if choice_function == '1':
+        start_tool.login()
+        start_tool.make_reserve()
+    elif choice_function == '2':
+        start_tool.request_seckill_url()
+        start_tool.request_seckill_checkout_page()
+        start_tool.submit_seckill_order()
+    else:
+        print('没有此功能')
+        sys.exit(1)

+ 23 - 0
test.py

@@ -0,0 +1,23 @@
+class Solution:
+    def isValid(self, s: str) -> bool:
+        if len(s) <= 1:
+            return False
+
+        stack = []
+        s_map = {
+            ")": "(",
+            "]": "[",
+            "}": "{"
+        }
+        stack.append(s[0])
+        for i in range(1, len(s)):
+            if stack[-1] == s_map.get(s[i], None):
+                stack.pop(-1)
+            else:
+                stack.append(s[i])
+
+        return True if len(stack) == 0 else False
+
+
+solution = Solution()
+print(solution.isValid("{[]}"))

+ 21 - 0
timer.py

@@ -0,0 +1,21 @@
+# -*- coding:utf-8 -*-
+import time
+from datetime import datetime
+from jdlogger import logger
+from config import global_config
+
+class Timer(object):
+    def __init__(self, sleep_interval=0.5):
+        # '2018-09-28 22:45:50.000'
+        self.buy_time = datetime.strptime(global_config.getRaw('config','buy_time'), "%Y-%m-%d %H:%M:%S.%f")
+        self.sleep_interval = sleep_interval
+
+    def start(self):
+        logger.info('正在等待到达设定时间:%s' % self.buy_time)
+        now_time = datetime.now
+        while True:
+            if now_time() >= self.buy_time:
+                logger.info('时间到达,开始执行……')
+                break
+            else:
+                time.sleep(self.sleep_interval)

+ 115 - 0
util.py

@@ -0,0 +1,115 @@
+import json
+import random
+import requests
+from config import global_config
+from lxml import etree
+
+USER_AGENTS = [
+    "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36",
+    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2226.0 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36",
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36",
+    "Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36",
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1944.0 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2309.372 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2117.157 Safari/537.36",
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1866.237 Safari/537.36",
+    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/4E423F",
+    "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36 Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10",
+    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.517 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36",
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36",
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1623.0 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36",
+    "Mozilla/5.0 (X11; CrOS i686 4319.74.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1467.0 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1500.55 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Safari/537.36",
+    "Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36",
+    "Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36",
+    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17",
+    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17",
+    "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.15 (KHTML, like Gecko) Chrome/24.0.1295.0 Safari/537.15",
+    "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.14 (KHTML, like Gecko) Chrome/24.0.1292.0 Safari/537.14"
+    ]
+
+def parse_json(s):
+    begin = s.find('{')
+    end = s.rfind('}') + 1
+    return json.loads(s[begin:end])
+
+def get_random_useragent():
+    """生成随机的UserAgent
+    :return: UserAgent字符串
+    """
+    return random.choice(USER_AGENTS)
+
+def get_cookies():
+    """解析cookies内容并添加到cookiesJar"""
+    manual_cookies = {}
+    for item in global_config.getRaw('config','cookies_String').split(';'):
+        name, value = item.strip().split('=', 1)
+        # 用=号分割,分割1次
+        manual_cookies[name] = value
+        # 为字典cookies添加内容
+    cookiesJar = requests.utils.cookiejar_from_dict(manual_cookies, cookiejar=None, overwrite=True)
+    return cookiesJar
+
+def get_session():
+    # 初始化session
+    session = requests.session()
+    session.headers = {"User-Agent": global_config.getRaw('config', 'DEFAULT_USER_AGENT'),
+                       "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
+                       "Connection": "keep-alive"}
+    checksession = requests.session()
+    checksession.headers = {"User-Agent": global_config.getRaw('config', 'DEFAULT_USER_AGENT'),
+                            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
+                            "Connection": "keep-alive"}
+    # 获取cookies保存到session
+    session.cookies = get_cookies()
+    return session
+
+def get_sku_title():
+    """获取商品名称"""
+    url = 'https://item.jd.com/{}.html'.format(global_config.getRaw('config','sku_id'))
+    session = get_session()
+    resp = session.get(url).content
+    x_data = etree.HTML(resp)
+    sku_title = x_data.xpath('/html/head/title/text()')
+    return sku_title[0]
+
+def send_wechat(message):
+    """推送信息到微信"""
+    url = 'http://sc.ftqq.com/{}.send'.format(global_config.getRaw('messenger', 'sckey'))
+    payload = {
+        "text":'抢购结果',
+        "desp": message
+    }
+    headers = {
+        'User-Agent':global_config.getRaw('config', 'DEFAULT_USER_AGENT')
+    }
+    requests.get(url, params=payload, headers=headers)