Bootstrap

python自动化(三):selenium微博抢票(含抢票程序设计思路)

缘起

这个故事起源于女票是一个bjd娃圈爱好者,我才知道在娃圈里经常通过微博私信的方式进行一些商品的交易,例如娃娃的面妆、衣服和娃娃本身,这就引发了抢票需求

流程:

在某一个整的时间点进行微信的私信发送,排名靠前者获得,人工操作反应慢,只能提前一秒卡点按发送,但是又有提前的风险(显示的发送时间未到整点时间会被淘汰),而且只能发送一条信息,发多了也会被淘汰

需求:

尽可能快的在某时间点反映并进行操作,并且不能早于该时间点进行操作,精准度要求高

分析了这个需求以后,立马想到用python进行自动化,计算机不仅操作速度比人快,而且不需要提前卡点操作,条件设置好不会导致过早发送

一、基本思路

因为只是微博私信发送,所以这个程序很简单,就是利用selenium打开微博网页,然后登陆,找到私信的用户,输入内容,点击发送,这都是selenium的常规操作,这里就不赘述了

程序的核心就是利用while循环判断时间,如果到了时间就点击发送 

接下来主要讲:怎么卡点定时,和怎么提高运行效率

二、1.0版本:利用系统自带时间

while True:
        tt=time.asctime()
        if tt[14:16]=='00': #这里是一个简化处理,判断的时候直接用分钟数是否为“00”来代替整点,更严谨一点应该判断整个时间戳
            driver.find_element_by_xpath("//button[text()='发送']").click()
            break
        else:
            continue

最开始我想的很简单,就是获取系统自带的时间,但是运行过后发现电脑系统的时间和微博服务器的时间总有几秒的差距,因为微软和微博用的服务器不一样,所以总是有差距,对于卡点抢票的程序,这几秒的差距是致命的

为此我试过用time.sleep()强行把其中的差距补上,但是因为网速、时间运行差距累计的问题,这种方法显然是不可靠的,而且也失去了对时间精准度的核心需求,最后当然失败

;