選択できるのは25トピックまでです。
トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
70 行
2.2 KiB
70 行
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
|
|
|