某东抢购某台脚本——高调
小白操作-学习参考
说明
这个脚本用于自动化京东的秒杀过程,特别是对于高需求商品如茅台。它展示了通过自动化工具模拟用户行为的能力,但同时也涉及到了使用自动化脚本可能违反网站使用条款的问题。使用此类脚本前应确保合规,了解可能的风险。
这段脚本是为了自动化京东的秒杀活动而编写的。它涵盖了预约、获取令牌、跳转、以及最终的提交订单等多个步骤。以下是脚本各部分的详细解析:
函数和类解释
- getUrlParams(url):
- 解析URL中的查询参数并返回字典格式。
- get_cookie_string(cookie):
- 将cookie字典转换为字符串格式,以便在HTTP请求中使用。
- get_jd_time():
- 请求京东服务器时间,主要用于同步操作时间。
- get_sk(data):
- 通过特定的加密和处理逻辑生成
sk
值,此值可能用于提交订单时验证。
脚本流程
-
实例化
JDSecKillAPI
类。 -
调用
reserve_maotai()
函数进行预约。 -
获取令牌。
-
通过令牌获取跳转链接。
-
处理跳转,获取和处理验证码。
-
初始化订单操作。
-
获取
sk
值。 -
提交订单。
额外的注意点
-
使用了外部模块
JniSign
进行签名,这是一种保护措施以符合京东的API安全要求。 -
脚本涉及多次跳转和请求,反映了京东防刷措施的复杂性。
-
脚本运行依赖于正确的cookie和其他验证信息,这些信息需要事先获取。
脱敏处理部分代码
import requests
import re
import datetime
from urllib import parse
import JniSign
import timedef getUrlParams(url):res = dict(parse.parse_qsl(url))return resdef get_cookie_string(cookie):cookie_string = ''for cookie_key in cookie.keys():cookie_string += '%s=%s;' % (cookie_key, cookie[cookie_key])return cookie_stringdef get_jd_time():response = requests.get(url='https://api.m.jd.com/client.action?functionId=queryMaterialProducts&client=wh5')print(response.json())def get_sk(data):data_val = [val for val in data['data'].values()]n, o, p, q, r, s = data_val[0], data_val[1], data_val[2], data_val[3], data_val[4], data_val[5]sk_val = ''if n == 'cca':sk_val = p[14:19].lower() + o[5:15].upper()if n == 'ab': # check oksk_val = r[10:18] + s[2:13].lower()if n == 'ch':sk_val = q.upper() + r[6:10].upper()if n == 'cbc': # check oksk_val = q[3:13].upper() + p[10:19].lower()if n == 'by':sk_val = o[5:8] + re.sub('a', 'c', p, flags=re.IGNORECASE)if n == 'xa':sk_val = o[1:16] + s[4:10]if n == 'cza':sk_val = q[6:19].lower() + s[5:11]if n == 'cb':sk_val = s[5:14] + p[2:13].upper()return sk_valif __name__ == '__main__':login_cookie_186 = {'pin': '','wskey': '','whwswswws': '','unionwsws': ''}JDska = JDSecKillAPI(login_cookie=login_cookie_186)print(JDska.reserve_maotai())token_params = JDska.get_token_key()divide_url = JDska.get_appjmp(token_params=token_params)captcha_url = JDska.get_divide(divide_url=divide_url)seckill_url = JDska.get_captcha(captcha_url=captcha_url)JDska.get_seckill(seckill_url=seckill_url)order_data = JDska.init_action()sk_val = JDska.get_tak()print('python计算sk参数:%s' % sk_val)JDska.submit_order(order_data=order_data, sk=sk_val)
注意:
本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,