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')
     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('预约失败正在重试...')
示例#2
0
 def request_seckill_url(self):
     is_request_url_ok = False
     """访问商品的抢购链接(用于设置cookie等"""
     logger.info('用户:{}'.format(self.get_username()))
     logger.info('商品名称:{}'.format(self.get_sku_title()))
     
     self.seckill_url[self.sku_id] = self.get_seckill_url()
     logger.info('访问商品的抢购连接...')
     headers = {
         'User-Agent': self.user_agent,
         'Host': 'marathon.jd.com',
         'Referer': 'https://item.jd.com/{}.html'.format(self.sku_id),
     }
     try:
         retry_time = 3
         while(retry_time > 0):
             retry_time -= 1
             resp = self.session.get(
                 url=self.seckill_url.get(
                     self.sku_id),
                 headers=headers,
                 allow_redirects=False)
             resp.raise_for_status()
             is_request_url_ok = True
             break
         catch Exception as e:
             logger.error("访问商品的抢购连接重试....")
             wait_some_time()
    def _get_qrcode_ticket(self):
        """
        通过 token 获取票据
        :return:
        """
        url = 'https://qr.m.jd.com/check'
        payload = {
            'appid': '133',
            'callback': 'jQuery{}'.format(random.randint(1000000, 9999999)),
            'token': self.session.cookies.get('wlfstk_smdl'),
            '_': str(int(time.time() * 1000)),
        }
        headers = {
            'User-Agent': self.spider_session.get_user_agent(),
            'Referer': 'https://passport.jd.com/new/login.aspx',
        }
        resp = self.session.get(url=url, headers=headers, params=payload)

        if not response_status(resp):
            logger.error('获取二维码扫描结果异常')
            return False

        resp_json = parse_json(resp.text)
        if resp_json['code'] != 200:
            logger.info('Code: %s, Message: %s', resp_json['code'],
                        resp_json['msg'])
            return None
        else:
            logger.info('已完成手机客户端确认')
            return resp_json['ticket']
示例#4
0
    def _seckill(self):
        """
        抢购
        """
        '''
        STEP 1: 等待开始时间
        '''
        self.timers.start() 
     
        '''
        STEP 2:获取抢购信息
        '''
        is_request_url = self.request_seckill_url()
        if not is_request_url:
            logger.error("获取抢购信息失败, 抢购失败...")
            return

        '''
        STEP 3:抢购
        '''
        retry_time = 3
        try:
            while retry_time > 0:
                retry_time-=1
                self.request_seckill_checkout_page()
                self.submit_seckill_order()
        except Exception as e:
            logger.error('抢购发生异常,稍后继续执行!', e)
            wait_some_time()
 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')
     url = 'https:' + reserve_url
     logger.info('茅台预约url:{}'.format(url))
     # self.timers.start()
     while True:
         try:
             yuyue_resp = self.session.get(url)
             if "您已成功预约过了,无需重复预约" in yuyue_resp.text:
                 logger.info('用户:{},预约成功,已获得抢购资格 / 您已成功预约过了,无需重复预约'.format(
                     self.get_username()))
             break
         except Exception as e:
             logger.error('预约失败正在重试...')
             wait_some_time()
示例#6
0
 def _reserve(self):
     """
     预约
     """
     try:
         logger.info('预约结果:' + self.make_reserve())
     except Exception as e:
         logger.error('预约发生异常!', e)
示例#7
0
 def _validate_cookies(self):
     """
     验证cookies是否有效(是否登陆)
     通过访问用户订单列表页进行判断:若未登录,将会重定向到登陆页面。
     :return: cookies是否有效 True/False
     """
     url = 'https://order.jd.com/center/list.action'
     payload = {
         'rid': str(int(time.time() * 1000)),
     }
     try:
         resp = self.session.get(url=url, params=payload, allow_redirects=False)
         if resp.status_code == requests.codes.OK:
             return True
     except Exception as e:
         logger.error("验证cookies是否有效发生异常", e)
     return False
示例#8
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')
        resp.raise_for_status()
        self.timers.start()
        retry_time = 3
        is_reserve_ok = false
        while retry_time > 0:
            retry_time -= 1
            try:
                resp = self.session.get(url='https:' + reserve_url)
                if resp.status_code != 200:
                    logger.error("预约请求失败:{}, 重试中....".format( resp.status_code))
                    continue
                logger.info('预约成功,已获得抢购资格 / 您已成功预约过了,无需重复预约')
                is_reserve_ok = True
                if global_config.getRaw('messenger', 'enable') == 'true':
                    success_message = "预约成功,已获得抢购资格 / 您已成功预约过了,无需重复预约"
                    send_wechat(success_message)
                break
            except Exception as e:
                logger.error('预约失败正在重试...')

        if not is_reserve_ok:
            logger.error('预约失败...')
        return is_reserve_ok