import warnings import time from datetime import datetime import requests.utils from jdseckillAPIv2 import JDSecKillAPI from tools.mylogger import logger warnings.filterwarnings('ignore') from concurrent.futures import ThreadPoolExecutor, wait class JDSecKillSubmit(JDSecKillAPI): def __init__(self, sku, ck): super().__init__(sku=sku, ck=ck) self.sku = sku self.ck = ck def log(self, str_p): logger.info(str_p) def doKill(self, sk, order_data): resp_json = self.submit_order(order_data=order_data, sk=sk) if resp_json is not None: txt = order_data['address']['name'] + "抢购结果:" + str(resp_json) self.log(txt) if resp_json['success']: self.send_message(order_data['address']['name'] + '抢购成功, 订单:' + str(resp_json)) def appoint_task(self): try: resp_json = self.appoint_sku() print("预约结果:%s" % str(resp_json)) self.log('appoint:' + str(resp_json)) except Exception as e: print(str(e)) def killSku(self): try: token_params = self.get_token_key() print(datetime.now()) divide_url = self.get_appjmp(token_params=token_params) print(datetime.now()) captcha_url = self.get_divide(divide_url=divide_url) print(datetime.now()) seckill_url = self.get_captcha(captcha_url=captcha_url) print(datetime.now()) # todo 测试url # seckill_url = 'https://marathon.jd.com/seckillM/seckill.action?skuId=' + self.sku + '&num=1&rid=1639830212' resp = self.visit_seckill(seckill_url=seckill_url) order_data = self.init_action() print(datetime.now()) if order_data is not None: for k in range(50): sk_val = self.get_tak() print("计算sk:%s" % str(sk_val)) self.doKill(sk_val, order_data) time.sleep(0.5) return True return False except Exception as e: print(str(e)) return False