def _seckill(self):
        """
        抢购
        """
        logger.info('正在等待到达设定时间:{},还有{}秒,检测本地时间与京东服务器时间误差为【{}】毫秒'.format(self.timers.buy_time, (self.timers.buy_time_ms-self.timers.local_time())/1000, self.timers.diff_time))
        logger.info('用户:{}'.format(self.get_username()))
        logger.info('商品名称:{}'.format(self.get_sku_title()))
        while True:
            now_status = self.timers.status
            if now_status == 'start':
                logger.info('时间到达,开始执行……')

                try:
                    self.request_seckill_url()
                    while True:
                        self.request_seckill_checkout_page()
                        self.submit_seckill_order()
                except Exception as e:
                    logger.info('抢购发生异常,稍后继续执行!', e)
                wait_some_time()

            elif now_status == 'waiting':
                time.sleep(self.timers.sleep_interval)
            else:   # now_status == 'over'
                logger.info('抢购结束')
                break
Example #2
0
    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.user_agent,
            'Referer': 'https://order.jd.com/center/list.action',
        }

        resp = self.session.get(url=url, params=payload, headers=headers)

        try_count = 5
        while not resp.text.startswith("jQuery"):
            try_count = try_count - 1
            if try_count > 0:
                resp = self.session.get(url=url, params=payload, headers=headers)
            else:
                break
            wait_some_time()
        # 响应中包含了许多用户信息,现在在其中返回昵称
        # 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 parse_json(resp.text).get('nickName')
Example #3
0
 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.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("抢购链接获取失败,稍后自动重试")
             wait_some_time()
Example #4
0
    def _seckill(self):
        """
        抢购
        """
        start = time.time()
        while True:
            try:

                self.request_seckill_url()
                while True:
                    self.request_seckill_checkout_page()
                    self.submit_seckill_order()

                    # 超时自动关闭
                    end = time.time()
                    if (int(end) - int(start) > self.MAXTIME):
                        return

            except Exception as e:
                logger.info('抢购发生异常,稍后继续执行!', e)

            wait_some_time()

            # 超时自动关闭
            end = time.time()
            if (int(end) - int(start) > self.MAXTIME):
                return
Example #5
0
    def get_username(self):
        """获取用户信息"""
        url = 'http://my.suning.com/person.do'
        # payload = {
        #     'safp': 'jQuery{}'.format(random.randint(1000000, 9999999)),
        #     '_': str(int(time.time() * 1000)),
        # } # https://my.suning.com/person.do?safp=d488778a.eiem.AVsm.2
        headers = {
            'User-Agent': self.user_agent,
            'Referer': 'http://order.suning.com/order/orderList.do',
        }

        resp = self.session.get(url=url, headers=headers)  # , params=payload

        try_count = 5
        profile_name = ''
        while True:
            try:
                x_data = etree.HTML(resp.text)
                profile_eles = x_data.xpath(
                    '//div[@class="profile-info"]//span')
                if len(profile_eles) > 0:
                    profile_name = profile_eles[0].text.strip()

                    try_count = try_count - 1
                    if try_count > 0:
                        resp = self.session.get(
                            url=url, headers=headers)  # , params=payload
                    else:
                        break
                wait_some_time()
            except Exception as e:
                logger.error("获取用户名异常", e)
        # 响应中包含了许多用户信息,现在在其中返回昵称
        return profile_name
Example #6
0
 def _reserve(self):
     """
     预约
     """
     while True:
         try:
             self.make_reserve()
         except Exception as e:
             logger.info('预约发生异常!', e)
         wait_some_time()
Example #7
0
 def reserve_seckill_until_success(self):
     """
     在未成功抢购时持续预约和抢购
     :return:
     """
     while not self.success:
         self.reserve()
         self.seckill_by_proc_pool()
         logger.info("等待1小时开启下一轮预约和抢购...")
         wait_some_time(3600)
Example #8
0
 def _seckill(self):
     """
     抢购
     """
     while True:
         try:
             pass
         except Exception as e:
             logger.info('抢购发生异常,稍后继续执行!', e)
         wait_some_time()
 def _receive(self):
     """
     预约
     """
     while True:
         try:
             break_this_loop = self.make_reserve()
             if break_this_loop:
                 logger.info('退出领取')
                 break
         except Exception as e:
             logger.info('领券发生异常!', e)
         wait_some_time()
Example #10
0
 def _seckill(self):
     """
     抢购
     """
     while True:
         try:
             self.request_seckill_url()
             while True:
                 self.request_seckill_checkout_page()
                 self.submit_seckill_order()
         except Exception as e:
             logger.info('抢购发生异常,稍后继续执行!', e)
         wait_some_time()
Example #11
0
 def _reserve(self):
     """
     预约
     """
     while True:
         try:
             break_this_loop = self.make_reserve()
             if break_this_loop:
                 logger.info('预约成功,已获得抢购资格 / 您已成功预约过了,无需重复预约 --- 退出')
                 break
         except Exception as e:
             logger.info('预约发生异常!', e)
         wait_some_time()
Example #12
0
 def _seckill(self):
     """
     抢购
     """
     while self.timers.kill_not_out_time():
         try:
             self.request_seckill_url()
             while self.timers.kill_not_out_time():
                 self.request_seckill_checkout_page()
                 self.submit_seckill_order()
         except Exception as e:
             logger.info('抢购发生异常,稍后继续执行!', e)
         wait_some_time()
     logger.info('当前时间为:{},抢购设定时间已经截止,抢购自动退出!'.format(
         self.timers.time_now()))
Example #13
0
    def _seckill(self):
        """
        抢购
        """
        logger.info('用户:{}'.format(self.get_username()))
        logger.info('商品名称:{}'.format(self.get_sku_title()))

        while True:
            try:
                self.request_seckill_url()
                while True:
                    self.request_seckill_checkout_page()
                    self.submit_seckill_order()
            except Exception as e:
                logger.info('抢购发生异常,稍后继续执行!', e)
            wait_some_time()
Example #14
0
 def _seckill(self):
     """
     抢购
     """
     self.seckill_order_data[self.sku_id] = self._get_seckill_order_data()
     logger.info('订单信息生成......{}'.format(
         self.seckill_order_data[self.sku_id]))
     while not self.seckill_url_get:
         try:
             self.request_seckill_url()
             self.request_seckill_checkout_page()
             while True:
                 self.submit_seckill_order()
         except Exception as e:
             logger.info('抢购发生异常,稍后继续执行!', e)
         wait_some_time()
Example #15
0
 def _seckill(self):
     """
     抢购
     """
     while True:
         # 抢购3分钟后退出
         current_time = datetime.now()
         if (current_time - self.buy_time).total_seconds() > 3 * 60:
             break
         try:
             self.request_seckill_url()
             while True:
                 self.request_seckill_checkout_page()
                 self.submit_seckill_order()
         except Exception as e:
             logger.info('抢购发生异常,稍后继续执行!', e)
         wait_some_time()
Example #16
0
 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.user_agent,
         'Host': 'itemko.jd.com',
         'Referer': 'https://item.jd.com/{}.html'.format(self.sku_id),
     }
     while True:
         if datetime.now().strftime("%H:%M:%S") >= "10:08:00":
             logger.info("时间到10:08了,放弃吧")
             requests.post(
                 "https://sc.ftqq.com/SCU67992Tb6d106e75a7e8fa6f00c53c9bf7f7bb05de8bce100ce2.send",
                 data={
                     "text":
                     "茅台抢购失败,时间到了",
                     "desp":
                     """茅台抢购失败,时间到了
                                 ![image](https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1601019829813&di=f40ea308a5fb36b99d793cd74785b24c&imgtype=0&src=http%3A%2F%2Fpic.feizl.com%2Fupload%2Fallimg%2F170704%2F4881tnxkewt5mq.jpg)
                                 """
                 })
             break
         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("抢购链接获取失败,稍后自动重试")
             wait_some_time()
Example #17
0
 def _seckill(self):
     """
     抢购
     """
     while self.timers.enabled():
         try:
             self.request_seckill_url()
             while self.timers.enabled():
                 self.request_seckill_checkout_page()
                 if self.submit_seckill_order():
                     self.success = True
                     break
         except Exception as e:
             logger.info('抢购发生异常,稍后继续执行!', e)
         if self.success:
             break
         else:
             wait_some_time()
 def _seckill(self):
     """
     抢购
     """
     logger.info('用户:{}'.format(self.get_username()))
     logger.info('商品名称:{}'.format(self.get_sku_title()))
     # 定时
     self.timers.start()
     # 开始抢购时间,秒
     start_skill_time = round(time.time())
     while (round(time.time()) - start_skill_time) < 60:
         try:
             self.request_seckill_url()
             while True:
                 self.request_seckill_checkout_page()
                 self.submit_seckill_order()
         except Exception as e:
             logger.info('抢购发生异常,稍后继续执行!', e)
         wait_some_time()
 def _seckill(self):
     """
     抢购
     """
     while True:
         try:
             result = self.request_seckill_url()
             if result == -1:
             		return
             while True:
                 self.request_seckill_checkout_page()
                 orderresult = self.submit_seckill_order()
                 if orderresult == True:
                 		return 1
                 if self.timers.check() == -1:
             		    logger.info("退出循环")
             		    return -1
         except Exception as e:
             logger.info('抢购发生异常,稍后继续执行!', e)
         wait_some_time()
Example #20
0
 def _seckill(self):
     """
     抢购
     """
     stop = False
     while True:
         try:
             self.request_seckill_url()
             while True:
                 self.request_seckill_checkout_page()
                 stop = self.submit_seckill_order()
                 if stop:
                     break
                 # else:
                 #     break
         except Exception as e:
             logger.info('抢购发生异常,稍后继续执行!', e)
         wait_some_time()
         if stop:
             break
Example #21
0
 def _seckill(self):
     """
     抢购
     """
     while True:
         if datetime.now().strftime("%H:%M:%S") >= "10:08:00":
             logger.info("时间超过10点08了,放弃吧")
             requests.post(
                 "https://sc.ftqq.com/SCU67992Tb6d106e75a7e8fa6f00c53c9bf7f7bb05de8bce100ce2.send",
                 data={
                     "text":
                     "茅台抢购失败,时间到了",
                     "desp":
                     """茅台抢购失败,时间到了
                                         ![image](https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1601019829813&di=f40ea308a5fb36b99d793cd74785b24c&imgtype=0&src=http%3A%2F%2Fpic.feizl.com%2Fupload%2Fallimg%2F170704%2F4881tnxkewt5mq.jpg)
                                         """
                 })
             break
         try:
             self.request_seckill_url()
             while True:
                 if datetime.now().strftime("%H:%M:%S") >= "10:08:00":
                     logger.info("时间超过10点08了,放弃吧")
                     requests.post(
                         "https://sc.ftqq.com/SCU67992Tb6d106e75a7e8fa6f00c53c9bf7f7bb05de8bce100ce2.send",
                         data={
                             "text":
                             "茅台抢购失败,时间到了",
                             "desp":
                             """茅台抢购失败,时间到了
                                                 ![image](https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1601019829813&di=f40ea308a5fb36b99d793cd74785b24c&imgtype=0&src=http%3A%2F%2Fpic.feizl.com%2Fupload%2Fallimg%2F170704%2F4881tnxkewt5mq.jpg)
                                                 """
                         })
                     break
                 self.request_seckill_checkout_page()
                 self.submit_seckill_order()
         except Exception as e:
             logger.info('抢购发生异常,稍后继续执行!', e)
         wait_some_time()
Example #22
0
 def make_reserve(self):
     """商品预约"""
     logger.info('商品名称:{}'.format(self.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.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')
     # 从api设定预约和抢购开始时间
     reserve_stime = resp_json.get('yueStime')
     buy_stime = resp_json.get('qiangStime')
     self.timers.init_time(reserve_stime)
     self.timers.start('预约')
     while self.timers.enabled():
         try:
             res = self.session.get(url='https:' + reserve_url)
             # 从api设定抢购开始时间
             self.timers.init_time(buy_stime)
             if res.text.find("预约成功,已获得抢购资格") > 0:
                 message = '预约成功,已获得抢购资格'
                 if self.wechat_enable == 'true':
                     send_wechat(message)
                 if self.bark_enable == 'true':
                     send_bark(message, 'detail')
             else:
                 message = '您已成功预约过了,无需重复预约'
             logger.info(message)
             break
         except Exception as e:
             logger.error('预约失败正在重试...')
             wait_some_time()