不要再自己画冰墩墩了,用Python抢一个不香吗

最近冬奥会吉祥物冰墩墩火的离谱,以至于各大电商平台都被抢购一空,现在到淘宝的奥林匹克官方旗舰店里,发现冰墩墩已经下架不买了,真的是。。。只有一些非官方的店在售卖,也不知道货是真的还是假的~不过 anyway,先抢起来再说,就是一个卷!

这个脚本是大神“白露未晞”开源的,下面我们来看下该如何进行taobao抢购呢

登陆某宝

既然是抢购,那么登陆就是必然的第一步,这里使用了白露神开源的另一个项目 DecryptLogin 进行登陆处理

首先通过 pip 安装该项目

pip install DecryptLogin

然后登陆代码就非常简单了
from DecryptLogin import login

'''模拟登录'''

deflogin(self):

    lg = login.Login()

    infos_return, session = lg.taobao()

    return infos_return, session

这样我们执行代码之后,就会弹出某宝扫描登陆的二维码,我们通过扫描登陆即可!

加入购物车

下面再来看看具体抢购的实现

这里需要先手工把需要抢购的物品加入到自己的购物车当中,比如我当前的购物车内容如下

然后通过解析购物车页面来获取整个购物车的内容

'''获得购物车信息'''

def buycartinfo(self):

url = 'https://cart.taobao.com/cart.htm'

headers = {

'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6)

AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88

Safari/537.36',

'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1',

'upgrade-insecure-requests': '1',

'accept':

'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',

'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',

'cache-control': 'max-age=0'

}

response = self.session.get(url, headers=headers)

response_json = re.search('try{var firstData = (.*?);}catch', response.text).group(1)

response_json = json.loads(response_json)

user_id = re.search('\|\^taoMainUser:(.*?):\^', response.headers['s_tag']).group(1)

return response_json, user_id### unterminated keywords ###

def

接下来就是解析购物车内容了

# 解析购物车信息

if not cart_infos['success']:

raise RuntimeError('获取购物车信息失败, 请尝试删除cookie缓存文件后重新扫码登录')

if len(cart_infos['list']) == 0:

raise RuntimeError('购物车是空的, 请在购物车中添加需要抢购的商品')

good_infos = {}

for idx, item in enumerate(cart_infos['list']):

good_info = {

'title': item['bundles'][0]['orders'][0]['title'],

'cart_id': item['bundles'][0]['orders'][0]['cartId'],

'cart_params': item['bundles'][0]['orders'][0]['cartActiveInfo']['cartBcParams'],

'item_id': item['bundles'][0]['orders'][0]['itemId'],

'sku_id': item['bundles'][0]['orders'][0]['skuId'],

'seller_id': item['bundles'][0]['orders'][0]['sellerId'],

'to_buy_info': item['bundles'][0]['orders'][0]['toBuyInfo'],

}

good_infos[str(idx)] = good_info

# 打印并选择想要抢购的商品信息

title, items = ['id', 'title'], []

for key, value in good_infos.items():

items.append([key, value['title']])

self.printTable(title, items)

good_id = input('请选择想要抢购的商品编号(例如"0"): ')### unterminated keywords

可以看到效果如下


抢购

现在可以开始抢购了

代码较长,这里仅贴出部分

response = self.session.post(url = url, data = data, headers = headers, verify = False)

order_info = re.search('orderData= (.*?);\n</script>', response.text).group(1)

order_info = json.loads(order_info)

# 发送提交订单请求

token = self.session.cookies['_tb_token_']

endpoint = order_info['endpoint']

data = order_info['data']

structure = order_info['hierarchy']['structure']

hierarchy = order_info['hierarchy']

linkage = order_info['linkage']

linkage.pop('url')

submitref = order_info['data']['submitOrderPC_1']['hidden']['extensionMap']['secretValue']

sparam1 = order_info['data']['submitOrderPC_1']['hidden']['extensionMap']['sparam1']

input_charset = order_info['data']['submitOrderPC_1']['hidden']['extensionMap']['input_charset']

event_submit_do_confirm = order_info['data']['submitOrderPC_1']['hidden']['extensionMap']['event_submit_do_confirm']

url = f'https://buy.taobao.com/auction/confirm_order.htm?x-itemid={item_id}&x-uid={user_id}&submitref={submitref}&sparam1={sparam1}'

data_submit = {}

for key, value in data.items():

if value.get('submit') == 'true' or value.get('submit'):

data_submit[key] = value### unterminated keywords

当然由于是抢购,就必须一次一次的循环尝试购买

# 根据选择尝试购买商品

print(f'[INFO]: 正在尝试抢购商品{good_infos[good_id]["title"]}')

while True:

try:

is_success = self.buygood(good_infos[good_id], user_id)

except:

is_success = False

if is_success: break

time.sleep(self.trybuy_interval)

print(f'[INFO]: 抢购{good_infos[good_id]["title"]}成功, 已为您自动提交订单, 请尽快前往淘宝完成付款')### unterminated keywords ###

while

try

if


可以看到,以上所有的请求都是通过 requests 库来进行的,也就是说都是直接的 HTTP 请求,要比通过 selenium 等模拟工具快很多,也就是说抢到物品的概率也要大很多!语音播报/Server酱最后不得不说,白露大神实在是太贴心了,毕竟在抢购的时候我们不可能一直盯着屏幕,所以这里又有集成了语音播报的功能,当抢购成功之后,会循环播报抢购成功信息,提示尽快付款,爱心~

# 电脑语音提示

for _ in range(5):

pyttsx3.speak('已经为您抢购到你所需的商品, 请尽快前往淘宝完成付款.')

如果不能一直守候在电脑旁边,配置一个 Server 酱也是好的,抢购成之后发送消息到微信,无敌了!

'''发送Server酱提示'''

def pushwechat(self, desp='已经为您抢购到你所需的商品, 请尽快前往淘宝完成付款.'):

server_url = f'https://sc.ftqq.com/{self.server_key}.send'

params = {

'text': '商品抢购成功提示',

'desp': desp,

}

response = requests.get(server_url, params=params)

return response### unterminated keywords ###

def

Server酱配置地址如下:

http://sc.ftqq.com/3.version

使用方法
usage: taobaosnap.py [-h] --interval INTERVAL [--key KEY]

淘宝抢购脚本

optional arguments:

-h, --help          show this help message and exit

--interval INTERVAL  抢购商品时查询商品是否可以购买的时间间隔(单位秒)

--key KEY            Server酱的Key

比如直接在 cmd 终端运行:

python taobaosnap.py --interval 1800

最后我们看下抢购成功之后的效果

爱了有木有啊,还不赶快实操起来

如果觉得本文对你有所帮助,还请点赞+关注支持一下

完整的抢购代码,后台回复“抢购”获取!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,875评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,569评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,475评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,459评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,537评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,563评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,580评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,326评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,773评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,086评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,252评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,921评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,566评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,190评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,435评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,129评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,125评论 2 352

推荐阅读更多精彩内容