You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.2 KiB

2 years ago
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