Python selenium淘宝抢购物品程序

需要引用的一些库

selenium需要使用浏览器插件,谷歌浏览器插件chromedriver

下载地址:

下载好插件之后,把插件放在.py文件同一目录下就可以使用了

火狐浏览器也有插件,百度就有

from selenium import webdriver
from time import sleep
import time

登录操作

# 登录操作
def sign():
    bro.get(https://www.taobao.com/)
    sleep(1)
    sign = bro.find_element_by_link_text("登录")
    sign.click()
    # 给予用户登录时间
    sleep(10)

抢购模块

抢购流程中因为淘宝服务器响应时间的存在而导致程序中的全选和结算点击出错,具体是因为全选之后,才能点击结算,然而程序点击全选紧接着就点击结算,但是淘宝服务器也在判断你是否全选然后给你点结算的权限,这个时间差让程序结算点击过快,淘宝还没有给你结算按钮,程序就已经完成点击。导致跳出小循环后,在外层大循环中,重复做第一个全选点击,并且重复在第二个内层循环里发生上述错误。

所以我加入一个变量i来控制第一个全选循环,保证点击全选一次之后不再点击全选。

外层大循环(判断当前时间是否大于抢购时间)则一直重复下面2个内层循环(点击结算→点击提交订单)

def buys(teming):
    buy = bro.find_element_by_xpath(.//li [@class="site-nav-menu site-nav-cart site-nav-menu-empty site-nav-multi-menu J_MultiMenu mini-cart menu"])
    buy.click()
    sleep(1)
    i = 0
    while 1:
        try:
            if str(time.strftime("%H:%M:%S")) > teming:
                # i用来控制全选一次
                while i==0:
                    try:
                        # 全选购物车物品
                        if bro.find_element_by_xpath(.//div [@id="J_SelectAll1"]):
                            bro.find_element_by_xpath(.//div [@id="J_SelectAll1"]).click()
                            i += 1
                            break
                    except:
                        print("全选中...")
                while 1:
                    try:
                        # 反复点击结算按钮
                        bro.find_element_by_xpath(//*[@id="J_FloatBar"]/div[2]/div[3]/div[5]/a/span).click()
                        # 如果点击结算成功,就会跳转到提交订单页面,找到提交订单按钮说明结算成功,跳出循环
                        if bro.find_element_by_xpath(//*[@id="submitOrderPC_1"]/div/a[2]):
                            break
                    except:
                        print("结算中...")
                        if bro.find_element_by_xpath(//*[@id="submitOrderPC_1"]/div/a[2]):
                            break
                while 1:
                    try:
                        # 提交订单
                        if bro.find_element_by_xpath(//*[@id="submitOrderPC_1"]/div/a[2]):
                            print("提交成功")
                            bro.find_element_by_xpath(//*[@id="submitOrderPC_1"]/div/a[2]).click()
                            return 0
                    except:
                        print("提交订单中...")
        except:
            print("还未到开卖时间!")

主函数

输入的时间必须按照24小时,补0来,否则可能比较出错

if __name__ == "__main__":
    teming = str(input("请输入开始抢购时间(例:09:23:10或者15:03:04):"))
    bro = webdriver.Chrome(executable_path=./chromedriver.exe)
    sign()
    buys(teming)
经验分享 程序员 微信小程序 职场和发展