【温馨提示】本文共有2048个字,预计阅读完需要6分钟,请仔细阅读哦!
一年一度的猫狗大战如期而至,小伙伴们战果如何,是不是已经做好下半个月吃土的准备了?不过比吃土更伤心的恐怕是想要的东西在眼前却抢不到的痛苦吧,广告里不是都说了“错过一次,再等一年”么。作为一个码农怎么可能让这种事情发生呢,虽然网上有很多秒杀助手之类的插件或小程序,但是毕竟要登录自己的网购账号,还是不太放心的。今天咱们就来用前几天介绍的Pyppeteer框架自己动手写个抢购秒杀小工具,没有看过我前面介绍的小伙伴可以翻翻我的主页先去了解下。下面咱们就直奔主题,自己写个秒杀小工具。当然直接想要小工具的小伙伴们可以在最下面找到。
既然是要抢购秒杀,那我们先来回顾下我们人工是怎么个操作流程的。首先我们得打开浏览器,再打开我们事先收藏好的商品秒杀链接页面,然后静静地坐在电脑屏幕前,等待秒杀开启的那一刻,然后疯狂点击加入购物车,然后“该商品已售罄!”。啊~呸~。“宝贝已成功加入购物车,请快去付款吧!”......大体就是这么个流程了。接下来我们就按照这个逻辑一步步的用代码的方式实现它吧。
正式开始前请小伙伴们按我之前文章中介绍的方法,准备好Pyppeteer库,构建好基础运行环境(三分钟的事)
回到正题按照上面我们分析的秒杀流程,第一步:打开浏览器
import asyncio
from pyppeteer import launch
browser = await launch({'headless': True}) #打开浏览器 (这个参数后面会用到)
第二步:打开秒杀页面,这里我们就以华为P50这款热门机型的商品页为例,原理都是一样的,小伙伴们可以用自己心仪的商品进行试验。
page = await browser.newPage() #打开一个新的页面
await page.setViewport({'width': 1440, 'height': 960})
await page.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36 Edg/94.0.992.50")
await page.evaluateOnNewDocument('() =>{ Object.defineProperties(navigator,''{ webdriver:{ get: () => false } }) }')
await asyncio.wait([
page.waitForNavigation({'timeout': 15000}),
page.goto('https://item.jd.com/100024533316.html') #打开一个网页地址
])
这里逐行说明下,咱们在这个无头浏览器里打开一个新的tab页,然后设置好页面大小、浏览器的UserAgent,这些大家可设置成自己喜好的参数即可。下面这行就要注意了,因为猫家狗家都不希望是用程序秒它的东西嘛,所以都会有各种检测的,其中最常见的就是webdriver的检测,所以我们就需要在页面加载的时候给这个页面设置下。最下面就是打开页面了,为了保证页面加载完成才执行下面的操作所以需要将打开页面和等待做成一个“事务”。
第三步,找到加入购物车按钮
addcart_elements = await page.xpath("//p/p/a[@id = 'InitCartUrl']")
if addcart_elements is None or len(addcart_elements) == 0 or (await addcart_elements[0].boundingBox() is None):
print('未找到购物车按钮')
await browser.close() #关闭浏览器
return
页面加载完成后,通过xpath路径找到加入购物车的按钮,因为不同页面结构是不一样的,所以需要小伙伴们自己去找自己页面的路径,方法如下:打开电脑浏览器,打开商品页面,按下F12进入开发者模式,然后按图中①的元素选择按钮,这时鼠标就变成点选状态,选中加入购物车按钮②,右边就会出现高亮的代码块,这就是加入购物车的按键代码③。根据上下文的路径④,最后就能得到完整的xpath路径了
第四步:判断加入购物车状态,可以点击时再点击
addcart_element = addcart_elements[0]
classproperty = await (await addcart_element.getProperty('className')).jsonValue()
if "btn-disable" in classproperty:
print('还未开始秒杀')
await browser.close() #关闭浏览器
return
await asyncio.wait([
page.waitForNavigation({}),
addcart_element.click()
])
print("已经抢到,赶紧去付款吧")
因为在秒杀还没开始前按钮是无法点击的,这时需要做个简单判断,当按钮是不可点击状态时就退出,当秒杀开始了可以点击后再点击。同样,当可以点击时也需要做个“事务”点击事件执行完成后再执行下面动作。
到这里其实秒杀小工具的核心功能咱们已经都实现好了是不是很简单。但是实际上因为秒杀肯定是定点开启的,所以我们还需要做一个简单的定时任务去执行它,也是几行代码搞定。
scheduler = AsyncIOScheduler(timezone="Asia/Shanghai")
scheduler.add_job(miaosha, CronTrigger(hour="20", timezone="Asia/Shanghai")) #20点整自动运行
try:
scheduler.start()
except (KeyboardInterrupt, SystemExit):
pass
loop = asyncio.get_event_loop()
loop.run_forever()
这里还需要说明下,因为篇幅原因代码内没有集成自动登录功能,关于这个问题请大家关注我,后面会专门开一篇文章进行详细的介绍。因为Pyppeteer是支持cookie保持的,所以这里大家可以在第二部分代码块中加上暂停界面,第一次运行的时候手动去登录下就好。
本文内容仅做技术学习和讨论,如大家在学习中有什么问题,可以留言或私信我,大家一起学习交流。
【进阶知识】
近年来,受电商行业迅速发展和大众购物热潮扩展的影响,选择电商平台经营网店逐渐成为众多年轻人创业的首选。淘宝作为国内知名且老牌的电商平台,具有丰厚的流量和成熟的规则体系,对许多刚刚接触电商行业的新手们来说不失为一个不错的选择。但许多新手由于对行业及网店运营缺乏经验和了解,很多时候甚至不知该从哪方面入手开店。
A.商家首先需要打开手机淘宝,并在首页点击我的淘宝;
B.在工具栏点击更多,在全部工具点击免费开店;
C.然后点击实人认证,这时再点击开始认证;
D.进行人脸认证,随后点击立即拍照进行证件拍摄,拍摄完毕后点击提交,等待审核;
E.之后页面会显示审核结束日期,审核通过后商家需再次进入该页面,点击“我已阅读”协议,点击下方确认开店即可。
如果商家想开一家属于自己的网店,那么首先需要想好销售什么产品。选择产品时,商家除考虑自己销售偏好外还需多结合实际的市场需求情况,选择那些既想卖又好卖的产品。这样商家才能对店铺运营充满信心和热情,产品才会有一定的市场前景,才能促进店铺业绩和销量的提升。
产品标题是吸引流程的重要因素,因此商家需要杜绝盲目复制别家产品标题或随意想几个关键词就胡乱拼成产品标题等情况的发生。商家在确定产品标题时,可通过对不同关键词进行分析从而找出哪个关键词更适合店铺商品、更能为店铺带来效益,之后再将选出的关键词进行合理搭配。
如果店铺想要上架新品,那么商家首先就需要关注到产品上下架的时间。一般来讲,淘宝产品的上下架时间是需要计划的而并非商家随意想上架就上架。商家随意上架淘宝新品往往很有可能导致自家店铺的产品不如其他店铺的同类产品等情况。所以商家在对产品进行上下架处理之前,最好能做好合理的规划,在遵守和利用平台规则的基础上想办法提高店铺效益。
面对激烈的同行竞争,商家要做到不一味追求商品数量而盲目跟风进行低价促销,要确定好自己的销售方向,盲目跟风进行低价促销往往只会对店铺正常运营产生影响。因此商家在一开始给商品定价时就应确保自己的利益,在考虑成本的基础上对商品合理定价,切忌定价过高或过低,以免出现店铺没有流量或选取材质一般的商品节省成本这样的情况发生。
淘宝聚划算抢购技巧「聚划算整点秒杀攻略」
【本文标题和网址】淘宝秒杀助手哪个好「极速淘宝秒杀器分享」 http://www.cftyj.cn/taobao/2024082459788.html
内容更新时间(UpDate):
2024年08月24日 星期六