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.

70 lines
2.2 KiB

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