issue: 设置下单时间为2020-06-01-22-55-00-000000,订单提交时间大概需要2s左右
查找元素后进行点击还是需要较多时间
![](https://img.haomeiwen.com/i19317908/5be4caaabc80b006.jpg)
solution: 尝试模拟鼠标进行点击,或设置之间比目标时间提前。或先进行结算,到达目标时间再提交订单
提前点击结算,后续只进行提交订单还是会快一点,不过,提前点击结算后,在秒杀时间后点击提交订单是否会价格会变成秒杀价格还不清楚。
部分内容参考 教程
#!/usr/bin/env python
# coding: utf-8
from selenium import webdriver
import datetime
import time
from selenium.webdriver import ActionChains
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
def login(user,password):
wb.get("https://www.taobao.com")
if wb.find_element_by_link_text('亲,请登录'):
print("即将请求登录")
wb.find_element_by_link_text('亲,请登录').click()
time.sleep(2)
wb.find_element_by_link_text('密码登录').click()
wb.find_element_by_id('fm-login-id').send_keys(user) #id
wb.find_element_by_id('fm-login-password').send_keys(password) #密码
time.sleep(2) #滑块加载需要时间
source = wb.find_element_by_id("nc_1_n1z")
ActionChains(wb).drag_and_drop_by_offset(source, 258, 0).perform()
print("滑块已拖动")
time.sleep(2)
print('即将进行登录')
wb.find_element_by_xpath('//*[@id="login-form"]/div[4]/button').click()
print("2s后将打开购物车")
time.sleep(2)
def picking():
#其实判断是否有选择商品不必要,因为结算下单阶段还是要判断是否需要结算,这一步主要 是判断是否已选择商品
wb.get("https://cart.taobao.com/cart.htm") #打开购物车
wait = WebDriverWait(wb,2)
#global i
i = 0 #在while 外
while True:
try:
#print("ss")
tjdd = wait.until(EC.presence_of_element_located((By.XPATH,'//*[@class="submit-btn"][@id="J_Go"]')))
#不选择商品,结算也可点击,只是不会跳转页面,不用使用·elementToBeClickable()
#print("可点击")
#break
except:
print("请手动选择需下单商品")
i = 0 #若无结算按钮 i= 0,重新计时
time.sleep(2)
else:
if i ==0:
print("结算已可点击,请在1分钟内尽快选择所有商品") #只打印一次,即出现结算
time.sleep(2)
i += 2
if i == 60: #结算按钮在一分钟内不消失就退出循环并点击
print("即将进入时间判断及下单阶段")
break
else:
print(str(60-i),'s 后开始进入秒杀阶段')
while True: #提前点击结算,提交订单后是否会修改价格为目标时间之后?不行就注释掉,开启buy中的阶段
try:
aa = wb.find_element_by_link_text('结 算')
aa.click()
print('结算成功,准备提交订单') #退出结算循环,进入提交订单
break
except Exception as e:
print(e)
def buy(times):
time.sleep(0.1)
while True: #通过循环获得当前时间
now = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S-%f')
if now > times:
#字符串 (str 的实例) 使用其字符的 Unicode 码位数字值 (内置函数 ord() 的结果) 按字典顺序进行比较。
# while True:
# try:
# aa = wb.find_element_by_link_text('结 算')
# aa.click()
# print('结算成功,准备提交订单') #退出结算循环,进入提交订单
# break
# except Exception as e:
# print(e)
# time.sleep(0.05)
while True:
try:
bb = wb.find_element_by_xpath('//*[@title="提交订单"]')
bb.click()
print('成功提交订单')
break #提交订单后退出循环
except:
print('提交订单失败,正在重新提交')
break #如果当前时间已过计划时间退出循环
if __name__ == '__main__':
myuserid = input("请输入您的淘宝账号:")
mypassword = input("请输入您的淘宝密码:")
print("请输入商品下单时间,格式为:2020-06-01-21-55-24,即年月日时分秒")
now1 = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
print("当前时间为: ",now1)
mytime = input("下单时间: ")
mytime = mytime + "-000000"
print('下单时间设置为:',mytime)
wb = webdriver.Chrome()
wb.maximize_window()
login(user=myuserid,password=mypassword)
picking()
buy(times=mytime)
et = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S-%f')
print('订单提交时间为:',et)
网友评论