露露的大雕 发表于 2020-2-29 11:36

某宝秒杀关键模块及思路

本帖最后由 露露的大雕 于 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:18

本帖最后由 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

KILLCALL 发表于 2020-2-29 11:48

而且很多抢拍是看付款时间不是拍下时间

相信 发表于 2020-2-29 11:54

谢谢分享学习一下

梦泽阿 发表于 2020-2-29 11:58

非常实用,顶顶

那年听风 发表于 2020-2-29 11:59

阿宁 发表于 2020-2-29 12:09

好帖子 可惜不会用。。。

fanxing666 发表于 2020-2-29 12:17

极地企鹅 发表于 2020-2-29 12:29

改几行代码就适用chrome了

tianmx 发表于 2020-2-29 12:43

这绝对神器啊!

w92vv 发表于 2020-2-29 12:50

厉害了 感谢分享!{:1_921:}
页: [1] 2 3 4 5
查看完整版本: 某宝秒杀关键模块及思路