美文网首页
不要再自己画冰墩墩了,用Python抢一个不香吗

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

作者: Alex是大佬 | 来源:发表于2022-02-14 09:34 被阅读0次

最近冬奥会吉祥物冰墩墩火的离谱,以至于各大电商平台都被抢购一空,现在到淘宝的奥林匹克官方旗舰店里,发现冰墩墩已经下架不买了,真的是。。。只有一些非官方的店在售卖,也不知道货是真的还是假的~不过 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

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

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

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

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

相关文章

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

    最近冬奥会吉祥物冰墩墩火的离谱,以至于各大电商平台都被抢购一空,现在到淘宝的奥林匹克官方旗舰店里,发现冰墩墩已经下...

  • Python画冰墩墩

    Python画冰墩墩代码自取效果: 代码:

  • 冰墩墩为啥这么火

    前两天看到同事在淘宝上抢冰墩墩,加上网上对冰墩墩的火爆追捧及一墩难求的现状,我也不由自主的加入了疯抢冰墩墩的大军行...

  • 抢冰墩墩

    最近火爆全国的冬奥会吉祥物冰墩墩正在电商平台及线下商店热销,很多人彻夜排队只为抢购一只可爱的冰墩墩。 我因没有时间...

  • 用Python做冰墩墩

    今天,我的专属“冰墩墩”已经用电脑程序Python做出来了。我真是太喜欢他了! 我的这个...

  • 我的彩铅画~冰墩墩

    工具:霹雳马彩铅 获多福画纸190g 用彩铅画一幅冰墩墩,凑凑人人渴求一个冰墩墩的热闹。 在给冰墩墩脸...

  • 冰墩墩

    妈妈我想要一个冰墩墩,可是冰墩墩一墩难求啊,我真的好想要一个冰墩墩,妈妈你给我做一个冰墩墩吧。 闺女你想要一个冰墩...

  • 看似简单实则不然

    看到大家都有属于自己的冰墩墩,我也一涌而上,也大胆尝试,试着自己用橡皮泥造一个出来,拥有属于自己的冰墩墩。...

  • 画冰墩墩

    文/佐佐 星期天,我们去上了素描课。素描课的内容是画冰墩墩。 老师是帮我打的最下面的那根横线,然后剩下的都是我自己...

  • 冰墩墩火了 2022-02-09

    最近冰墩墩火了,可能是因为冬奥会的缘故,也或许是因为它萌萌的外表的原因。现在出现了朋友圈抢墩墩的情形。本来一个不怎...

网友评论

      本文标题:不要再自己画冰墩墩了,用Python抢一个不香吗

      本文链接:https://www.haomeiwen.com/subject/pfntlrtx.html