某宝秒杀关键模块及思路
本帖最后由 露露的大雕 于 2020-2-29 15:14 编辑python自学
鉴于近期口罩真缺某宝的一部分商家都有整点秒杀
虽然公司提供了充足的口罩,但系还是去试了下,结果就是人手永远比不过机器
所以昨晚连夜写了个秒杀py,本着试试水结果还真的可以抢到,所以分享给还没抢到口罩的小伙伴们
话不多说直接上码
这里需要火狐浏览器
安装后把自己的路径改好
import os
from selenium import webdriver
import datetime
import time
#deckodreiver
firefox = os.path.abspath(r"C:\Program Files\Mozilla Firefox\firefox.exe")
os.environ["webdriver.firefox.bin"] = firefox
driver = webdriver.Firefox()
driver.maximize_window()
然后就是登录了
为了避免泄露这里用到扫码登录
自己在打开的火狐浏览器界面扫码登录
我设置了十秒休眠用于登录
动作快的自己改下
def login():
driver.get("https://cart.taobao.com/cart.htm")
time.sleep(10)
if driver.find_element_by_id("J_SelectAll2"):
driver.find_element_by_id("J_SelectAll2").click()
然后到我们的下单函数了
def buy(buytime):
i=0
while True:
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
if now > buytime:
try:
driver.find_element_by_link_text("结 算").click()
try:
time.sleep(0.5)
driver.find_element_by_link_text('提交订单').click()
print(f"抢购成功,请尽快付款")
break
except:
time.sleep(0.2)
driver.find_element_by_link_text('提交订单').click()
print(f"抢购成功,请尽快付款")
driver.get("https://cart.taobao.com/cart.htm")
time.sleep(0.9)
if driver.find_element_by_id("J_SelectAll2"):
driver.find_element_by_id("J_SelectAll2").click()
print(f"再次尝试提交订单"+now)
if i>2:
break
i+=1
pass
except:
driver.get("https://cart.taobao.com/cart.htm")
time.sleep(0.9)
if driver.find_element_by_id("J_SelectAll2"):
driver.find_element_by_id("J_SelectAll2").click()
print(f"再次尝试提交订单"+now)
if i>2:
break
i+=1
pass
下单这里做了异常重试
不过像秒杀类活动基本都是俩次不中就凉凉了
最后把main函数补上
if __name__=="__main__":
login()
buy('2020-02-25 09:59:58')
到这里代码就完善了
接下来讲下代码思路
让我们把视角回到登录那里
driver.get("https://cart.taobao.com/cart.htm")
很明显就是跳转到淘宝购物车页面,这时候只需要扫码登录就能到购物车了
而 J_SelectAll2 则为淘宝页面全选框的标识符,其实页面有俩个全选按钮 使用J_SelectAll1 也是同等效果
然后就到我们的关键点了
根据我们的main函数可以看到 我们执行完登录后就到下单了
下单开始部分写的是无限循环函数逐秒判断时间是否已经到了可以抢购的时间
等时间到了以后自动点击结算按钮进入锁单页面
可能有小伙伴发现了结算后程序休眠了0.5秒
这里是因为我的网络延时怕页面还没加载完全程序抛出异常
如果你网络好的可以调低
最后就到付款页面自己输入密码付款就完成了
由于不在抢购时间这里用我购物车里面的衣服测试
运行程序后会自动吊起火狐浏览器托管状态
进入某宝购物车页面
自行扫码登录
休眠十秒后自动全选购物车商品
然后就是无限循环每秒轮询一次等待抢购时间到了
自动下单
下单失败会抛出异常并返回购物车重试
下单成功的会跑到支付页面
自行输入支付密码
ok
感谢提醒这里需要用到火狐的一个插件geckodriver.exe
本帖最后由 1124828050 于 2020-2-29 19:24 编辑
打不开火狐是咋回事..
Traceback (most recent call last):
File "D:\python\lib\site-packages\selenium\webdriver\common\service.py", line 72, in start
self.process = subprocess.Popen(cmd, env=self.env,
File "D:\python\lib\subprocess.py", line 854, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "D:\python\lib\subprocess.py", line 1307, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: 系统找不到指定的文件。
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:/Users/张张/PycharmProjects/untitled/taobao.py", line 10, in <module>
driver = webdriver.Firefox()
File "D:\python\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 164, in __init__
self.service.start()
File "D:\python\lib\site-packages\selenium\webdriver\common\service.py", line 81, in start
raise WebDriverException(
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
进程已结束,退出代码 1
而且很多抢拍是看付款时间不是拍下时间 谢谢分享学习一下 非常实用,顶顶 好帖子 可惜不会用。。。 改几行代码就适用chrome了 这绝对神器啊! 厉害了 感谢分享!{:1_921:}