双十一0点抢购python脚本测试

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_15158911/article/details/83987059

该脚本适合商品的双十一秒杀活动,具体实现方式如下:

在双十一0点之前提前运行脚本,打开网页,登录(经测试手动打开网页输入用户名和密码后不需要进行滑块验证,使用脚本打开网页每次都需要进行滑块验证,暂时没有找到啥原因,所以改为等待10s,手动扫描二维码登录),滚动页面找到需要操作的元素,勾选尺码,颜色等信息。启动监听器,设置监听时间间隔和监听持续时间,等时间到达0点时,点击立即购买,提交订单。

# -*-coding:utf-8 -*-
from selenium import webdriver
import time
import pyautogui as pag
import datetime
from retry import retry
import logging

logging.basicConfig()
@retry(tries=10, delay=1,jitter=1)#重试机制,如果buy()方法执行失败,会每隔1s,重新执行10次该方法,直到成功
def buy():
    driver.find_element_by_xpath('//*[@id="J_juValid"]/div[1]/a').click()#点击立即购买
    pag.scroll(-900)
    driver.find_element_by_class_name('go-btn').click()#提交订单   

def login(url):
    #打开网页
    driver.get(url)
    driver.maximize_window()
    driver.find_element_by_xpath('//*[@id="J_SiteNavLogin"]/div[1]/div[1]/a[1]').click()#点击请登录
    #手动扫码登录
    time.sleep(10)     
    pag.scroll(-600)#页面往下滚动600,使需要操作的元素显示在屏幕上
    time.sleep(2)   
    driver.find_element_by_xpath('//*[@id="J_isku"]/div/dl[1]/dd/ul/li[2]/a/span').click()#选择尺码
    time.sleep(2)  
    monitor()

def monitor():#监控线程
    interval = 0.1
    last = 1800
    elapse = 0
    while elapse < last:
        t =  datetime.datetime.now()
        now = t.strftime('%Y-%m-%d %H:%M:%S')
        print '现在时间是 %s' % (now)
     
        if now == '2018-11-11 10:00:00':
            print '立即购买!'
            buy()
            break
        else:
            print '还没开始呢,再等等吧!'
        time.sleep(interval)
        elapse += interval

driver = webdriver.Chrome()
url='https://item.taobao.com/item.htm?id=581169694730'
login(url)

另外,上面的脚本中用到了retry模块,简单介绍下:

我们经常遇到一个场景,就是如果操作失败则需要多次重试某些操作,这种情况下,如果想优雅的实现功能,又不关心重试逻辑,则可以学习该模块。

安装方法:pip install retry

一个简单的例子:

# -*-coding:utf-8 -*-
from retry import retry
import logging

#@retry重试机制,如果方法执行失败,会重新执行n次
@retry(tries=3, delay=1,jitter=1)

# tries:重试的次数
# delay:延时时间
# jitter:累加,以及异常触发的日志

def make_trouble():
    print ('retrying...')
    raise#通过raise引发异常,执行重试机制

if __name__ == '__main__':
    logging.basicConfig()
    make_trouble()

运行结果:

展开阅读全文

没有更多推荐了,返回首页