Exemplo n.º 1
0
 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 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),
     }
     print("payload" + json.dumps(payload) + "\n" + "headers" +
           json.dumps(headers))
     resp = self.session.get(url=url, params=payload, headers=headers)
     print(resp)
     resp_json = parse_json(resp.text)
     reserve_url = resp_json.get('url')
     for flag in range(10):
         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('预约失败正在重试...' + str(flag) + " " + str(e))
             sleep(random.randint(1, 3))
     sys.exit(1)
Exemplo n.º 3
0
 def get_seckill_url(self):
     self.sku_name = get_sku_title()
     """获取商品的抢购链接
     点击"抢购"按钮后,会有两次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秒后重试",
                         self.sku_name)
             time.sleep(0.1)
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
    def mobile_submit_order(self):
        # 手机端提交订单
        url = 'https://fo.m.jd.com/m/pay/payWithCheckOut'
        payload = {
            'skuId': self.sku_id,
            'skuNum': 1,
            'addressId': 1405661826,
            'type': 2,
            'payType': 1,
        }
        # sec_kill_order_data = self._get_seckill_order_data(
        # )
        # logger.info('提交抢购订单...')
        headers = {
            'User-Agent':
            self.default_user_agent,
            # 'Host': 'trade.jd.com',
            'Referer':
            'https://fo.m.jd.com/m/settlement/payMiddle?skuId=' + self.sku_id +
            'subPrice=0&notiPrice=0&expectingPrice=0&expireDate=undefined&type=2',
            'authority':
            'fo.m.jd.com',
            'scheme':
            'https',
            'method':
            'POST',
            'path':
            '/m/pay/payWithCheckOut',
            # 'sec-fetch-dest:': 'empty',
            # 'sec-fetch-mode:': 'cors',
            # 'sec-fetch-site:': 'same-origin',
        }
        # self.session.mount('https://trade.jd.com/', HTTP20Adapter())

        # resp = requests.post(url, cookies=self.session.cookies, headers=headers, params=payload, data=.seckill_order_data.get(
        #         self.sku_id))

        logger.info('用户:{}'.format(self.get_username()))
        logger.info('sku_id:{}'.format(self.sku_id))
        logger.info('商品名称:{}'.format(get_sku_title()))
        self.timers.start()

        resp = self.session.post(
            url=url,
            params=payload,
            # data=sec_kill_order_data,
            headers=headers)
        logger.info(resp.text)
        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))
            if global_config.getRaw('messenger', 'enable') == 'true':
                success_message = "抢购成功,需要手动支付,订单号:{}, 商品:{}".format(
                    order_id, get_sku_title())
                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
Exemplo n.º 6
0
    def submit_seckill_order(self):
        """提交抢购(秒杀)订单
        :return: 抢购结果 True/False
        """
        # url = 'https://marathon.jd.com/seckillnew/orderService/pc/submitOrder.action'
        url = 'https://trade.jd.com/shopping/order/submitOrder.action'
        payload = {
            'skuId': self.sku_id,
            'submitOrderParam.payPassword': '******',
            'vendorRemarks': '[{"venderId":"715322","remark":""}]',
            'submitOrderParam.sopNotPutInvoice': 'true',
            'submitOrderParam.trackID': 'TestTrackId',
            'submitOrderParam.ignorePriceChange': '0',
            'submitOrderParam.btSupport': '0',
            'submitOrderParam.eid':
            'IFFL6KCM7GNWKEF7QYJWY7GV6N5TDO3XY32JXHQYGXVRSU37R7XXMVOGMB55UONBL657M5JEAKFPNLWJVO7MP6RQCI',
            'submitOrderParam.fp': 'f8796ac2de74f27aa2279ebd189d5121',
            'submitOrderParam.jxj': '1',
        }
        sec_kill_order_data = self._get_seckill_order_data()
        # logger.info('提交抢购订单...')
        headers = {
            'User-Agent': self.default_user_agent,
            'Host': 'trade.jd.com',
            'Referer':
            'https://trade.jd.com/shopping/order/getOrderInfo.action',
            'authority': 'trade.jd.com',
            'scheme': 'https',
            'method': 'POST',
            'path': '/shopping/order/submitOrder.action?',
            # 'sec-fetch-dest:': 'empty',
            # 'sec-fetch-mode:': 'cors',
            # 'sec-fetch-site:': 'same-origin',
        }
        # self.session.mount('https://trade.jd.com/', HTTP20Adapter())

        # resp = requests.post(url, cookies=self.session.cookies, headers=headers, params=payload, data=.seckill_order_data.get(
        #         self.sku_id))

        resp = self.session.post(url=url,
                                 params=payload,
                                 data=sec_kill_order_data,
                                 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))
            if global_config.getRaw('messenger', 'enable') == 'true':
                success_message = "抢购成功,需要手动支付,订单号:{}, 商品:{}".format(
                    order_id, get_sku_title())
                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