def auto_pay(self): """自动结算""" # 比较时间点击结算 while True: server_time = time_func.get_tb_server_time() # get_jd_server_time now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f") # 如果结算超时,则判定为抢购失败 if time_func.time_out(set_time=self.set_time, now_time=now_time): print("[{}][{}] <---------------结算超时,抢购失败--------------->".format(now_time, server_time)) # 将超时记录记入日志 self.logger.info(now_time + "商品结算超时,抢购失败") if self.email: SendMail.SendEmail(self.email, SendMail.platform_list["jingdong"], SendMail.fail_text) return # 如果当前本地时间或服务器时间有一个超过了预设抢购时间,则开始抢购 if (now_time > self.set_time) or (server_time > self.set_time): # self.logger.info(now_time + "开始秒杀") while True: try: # 在页面内寻找结算元素,若找到则点击 if self.browser.find_element_by_link_text("去结算"): self.browser.find_element_by_link_text("去结算").click() print("[{}][{}] <---------------结算成功,等待提交订单--------------->".format(now_time, server_time)) # 将结算成功记录记入日志 self.logger.info(now_time + "商品结算成功!") # 调用自动提交订单函数 if self.auto_submit(): return except: pass
def auto_submit(self): """自动提交订单""" while True: try: # 在页面内寻找提交订单元素,若找到则点击 if self.browser.find_element_by_link_text("提交订单"): self.browser.find_element_by_link_text("提交订单").click() # 抢购成功,则打印成功信息 print( "[{}][{}] <---------------抢购成功,请尽快付款--------------->". format(time_func.get_datetime(), time_func.get_tb_server_time())) # 将成功记录记入日志 self.logger.info(time_func.get_datetime() + "<---商品抢购成功!--->") # 发邮件提示成功 if self.email: SendMail.SendEmail(self.email, SendMail.platform_list["taobao"], SendMail.success_text) return True except: pass
def tb_buy(self): # self.method: # 0:自动全选购物车 # 1:用户自主选择要购买的商品 # 2:用户输入宝贝链接 self.logger.info("开始抢购商品,抢购模式为:" + str(self.method) + ",设定时间为:" + self.set_time) # 自动全选购物车 if self.method == 0: # 打开淘宝购物车 self.browser.get("https://cart.taobao.com/cart.htm") # 等待打开购物车 time.sleep(2) while True: try: # 找到全选按钮并点击 if self.browser.find_element_by_id("J_SelectAll1"): self.browser.find_element_by_id("J_SelectAll1").click() time.sleep(0.5) break except: pass # print("[{}] 未找到全选按钮".format(time_func.get_time())) # time.sleep(0.1) self.auto_pay() # 用户自主选择要购买的商品 elif self.method == 1: # 打开淘宝购物车 self.browser.get("https://cart.taobao.com/cart.htm") # 等待打开购物车(找到购物车中独有”全选“元素,判定为打开) time.sleep(2) # 此处无法判断用户何时选择完毕,选择等待10s为用户选择完毕时间 print("[{}] 请手动勾选需购买的物品".format(time_func.get_time())) time.sleep(10) self.auto_pay() # 用户输入宝贝链接 elif self.method == 2: # 检查给入商品链接是否为合法淘宝链接 if "taobao" in self.goods_url or "tmall" in self.goods_url: try: # 打开指定商品链接 self.browser.get(self.goods_url) time.sleep(2) # 等待勾选抢购的商品型号 print("[{}] 请尽快勾选所需物品型号".format(time_func.get_time())) time.sleep(5) # 不停检查当前时间是否已达到抢购开始时间,若达到,则开始抢购 while True: # now_time为datetime获取到的本地时间,精确到毫秒 now_time = datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S.%f") # server_time为利用request从淘宝服务器返回的包头获取到的服务器时间,精确到秒 server_time = time_func.get_tb_server_time() # 如果结算超时,则判定为抢购失败 if time_func.time_out(set_time=self.set_time, now_time=now_time): print( "[{}][{}] <---------------结算超时,抢购失败--------------->" .format(now_time, server_time)) # 将超时记录记入日志 self.logger.info(now_time + "商品结算超时,抢购失败") if self.email: SendMail.SendEmail( self.email, SendMail.platform_list["taobao"], SendMail.fail_text) return if (now_time > self.set_time) or (server_time > self.set_time): while True: try: # 时间到了便尝试点击立即购买 if self.browser.find_element_by_link_text( "立即购买"): self.browser.find_element_by_link_text( "立即购买").click() # 若立即购买点击后用户还没有选择好商品型号,则无法进入提交订单页面 # 通过检查此时页面中有无提交订单,来判断是否选好型号 # 若检查到提交订单,则点击,并在各处反馈成功信息 if self.browser.find_element_by_link_text( "提交订单"): self.browser.find_element_by_link_text( "提交订单").click() print( "[{}] <---------------抢购成功,请尽快付款--------------->" .format(time_func.get_datetime())) # 将成功记录记入日志 self.logger.info( time_func.get_datetime() + "<---抢购成功!--->商品链接:" + self.goods_url) # 发邮件提示成功 if self.email: SendMail.SendEmail( self.email, SendMail. platform_list["taobao"], SendMail.success_text) break except: pass # 防止上方提交订单失败 while True: if self.browser.find_element_by_link_text( "提交订单"): try: self.browser.find_element_by_link_text( "提交订单").click() print( "[{}] <---------------抢购成功,请尽快付款--------------->" .format(time_func.get_datetime())) self.logger.info( time_func.get_datetime() + "<---抢购成功!--->商品链接:" + self.goods_url) return except: print("[{}] 再次尝试提交订单".format( time_func.get_time())) else: return except: print("[{}] 无法打开指定链接".format(time_func.get_time())) else: print("[{}] 链接非法,请输入合法淘宝网商品链接".format(time_func.get_time()))