├── README.md └── fastbuy_taobao.py /README.md: -------------------------------------------------------------------------------- 1 | # AutoBuyScripts 2 | 淘宝等网站抢购脚本(需chromedriver.exe) 3 | 4 | # 淘宝抢购脚本 5 | ## 使用方法: 6 | ### 1、先将需要抢购的商品放到购物车中(注意购物车中只能放需要抢购的东西,到时抢购的时候会全部提交); 7 | ### 2、修改下本脚本中的BUY_TIME值,设定为需要抢购的时间; 8 | ### 3、执行此脚本,然后等待浏览器打开弹出登陆界面,手机淘宝扫描登陆; 9 | ### 4、脚本开始执行后,会定时刷新防止超时退出,到了设定时间点会自动尝试提交订单; 10 | ### 5、抢购时为了防止一次网络拥堵出问题,设置了尝试机制,会不停尝试提交订单,直到提交成功或达到最大重试次数为止# 11 | ### 6、脚本只负责提交订单,之后24小时内需要自行完成付款操作。 12 | -------------------------------------------------------------------------------- /fastbuy_taobao.py: -------------------------------------------------------------------------------- 1 | ################################################################################################################## 2 | # 淘宝抢购脚本 # 3 | # 使用方法: # 4 | # 1、先将需要抢购的商品放到购物车中(注意购物车中只能放需要抢购的东西,到时抢购的时候会全部提交); # 5 | # 2、修改下本脚本中的BUY_TIME值,设定为需要抢购的时间; # 6 | # 3、执行此脚本,然后等待浏览器打开弹出登陆界面,手机淘宝扫描登陆; # 7 | # 4、脚本开始执行后,会定时刷新防止超时退出,到了设定时间点会自动尝试提交订单; # 8 | # 5、抢购时为了防止一次网络拥堵出问题,设置了尝试机制,会不停尝试提交订单,直到提交成功或达到最大重试次数为止# 9 | # 6、脚本只负责提交订单,之后24小时内需要自行完成付款操作。 # 10 | ################################################################################################################## 11 | import os 12 | from selenium import webdriver 13 | from selenium.webdriver.common.action_chains import ActionChains 14 | import datetime 15 | import time 16 | import random 17 | 18 | 19 | # ==== 设定抢购时间 (修改此处,指定抢购时间点)==== 20 | BUY_TIME = "2018-10-14 19:31:30" 21 | 22 | 23 | 24 | # ==== 标识登录状态、重试次数 ==== 25 | MAX_LOGIN_RETRY_TIMES = 6 26 | 27 | current_retry_login_times = 0 28 | login_success = False 29 | buy_time_object = datetime.datetime.strptime(BUY_TIME, '%Y-%m-%d %H:%M:%S') 30 | 31 | now_time = datetime.datetime.now() 32 | if now_time > buy_time_object: 33 | print("当前已过抢购时间,请确认抢购时间是否填错...") 34 | exit(0) 35 | 36 | print("正在打开chrome浏览器...") 37 | #让浏览器不要显示当前受自动化测试工具控制的提醒 38 | option = webdriver.ChromeOptions() 39 | option.add_argument('disable-infobars') 40 | driver = webdriver.Chrome(chrome_options=option) 41 | driver.maximize_window() 42 | print("chrome浏览器已经打开...") 43 | 44 | 45 | def __login_operates(): 46 | driver.get("https://www.taobao.com") 47 | try: 48 | if driver.find_element_by_link_text("亲,请登录"): 49 | print("没登录,开始点击登录按钮...") 50 | driver.find_element_by_link_text("亲,请登录").click() 51 | print("请使用手机淘宝扫描屏幕上的二维码进行登录...") 52 | time.sleep(10) 53 | except: 54 | print("已登录,开始执行跳转...") 55 | global login_success 56 | global current_retry_login_times 57 | login_success = True 58 | current_retry_login_times = 0 59 | 60 | def login(): 61 | print("开始尝试登录...") 62 | __login_operates() 63 | global current_retry_login_times 64 | while current_retry_login_times < MAX_LOGIN_RETRY_TIMES: 65 | current_retry_login_times = current_retry_login_times + 1 66 | print("当前尝试登录次数:" + str(current_retry_login_times)) 67 | __login_operates() 68 | if login_success: 69 | print("登录成功") 70 | break; 71 | else: 72 | print("等待登录中...") 73 | 74 | if not login_success: 75 | print("规定时间内没有扫码登录淘宝成功,执行失败,退出脚本!!!") 76 | exit(0); 77 | 78 | 79 | 80 | # time.sleep(3) 81 | now = datetime.datetime.now() 82 | print('login success:', now.strftime('%Y-%m-%d %H:%M:%S')) 83 | 84 | def __refresh_keep_alive(): 85 | #重新加载购物车页面,定时操作,防止长时间不操作退出登录 86 | driver.get("https://cart.taobao.com/cart.htm") 87 | print("刷新购物车界面,防止登录超时...") 88 | time.sleep(60) 89 | 90 | 91 | def keep_login_and_wait(): 92 | print("当前距离抢购时间点还有较长时间,开始定时刷新防止登录超时...") 93 | while True: 94 | currentTime = datetime.datetime.now() 95 | if (buy_time_object - currentTime).seconds > 180: 96 | __refresh_keep_alive() 97 | else: 98 | print("抢购时间点将近,停止自动刷新,准备进入抢购阶段...") 99 | break 100 | 101 | 102 | 103 | 104 | def buy(): 105 | #打开购物车 106 | driver.get("https://cart.taobao.com/cart.htm") 107 | time.sleep(1) 108 | 109 | #点击购物车里全选按钮 110 | if driver.find_element_by_id("J_SelectAll1"): 111 | driver.find_element_by_id("J_SelectAll1").click() 112 | print("已经选中购物车中全部商品 ...") 113 | 114 | submit_succ = False 115 | retry_submit_times = 0 116 | while True: 117 | now = datetime.datetime.now() 118 | if now >= buy_time_object: 119 | print("到达抢购时间,开始执行抢购...尝试次数:" + str(retry_submit_times)) 120 | if submit_succ: 121 | print("订单已经提交成功,无需继续抢购...") 122 | break 123 | if retry_submit_times > 50: 124 | print("重试抢购次数达到上限,放弃重试...") 125 | break 126 | 127 | retry_submit_times = retry_submit_times + 1 128 | 129 | try: 130 | #点击结算按钮 131 | if driver.find_element_by_id("J_Go"): 132 | driver.find_element_by_id("J_Go").click() 133 | print("已经点击结算按钮...") 134 | click_submit_times = 0 135 | while True: 136 | try: 137 | if click_submit_times < 10: 138 | driver.find_element_by_link_text('提交订单').click() 139 | print("已经点击提交订单按钮") 140 | submit_succ = True 141 | break 142 | else: 143 | print("提交订单失败...") 144 | except Exception as ee: 145 | #print(ee) 146 | print("没发现提交订单按钮,可能页面还没加载出来,重试...") 147 | click_submit_times = click_submit_times + 1 148 | time.sleep(0.1) 149 | except Exception as e: 150 | print(e) 151 | print("不好,挂了,提交订单失败了...") 152 | 153 | time.sleep(0.1) 154 | 155 | 156 | login() 157 | keep_login_and_wait() 158 | buy() 159 | --------------------------------------------------------------------------------