使用
- 适合学python的练手
- 部分代码参考于他人,优化了部分逻辑
- 手动扫码,把需要的商品提前放入购物车
缺点
- 取决于网速,提交订单的时候有可能提示拥挤,抢个药应该没问题,抢茅台做梦
- 结算到提交订单之间的耗时处理的不好,抱砖引玉
import datetime
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
启动插件时间 = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")
print("启动插件时间::" + 启动插件时间)
抢购时间 = "2022-12-19 16:00:00.000000"
from selenium import webdriver
import time
driver = webdriver.Chrome()
timeout = 20
poll_frequency = 0.8
driver.get("https://www.taobao.com")
label1 = WebDriverWait(driver, timeout, poll_frequency).until(EC.visibility_of_element_located((By.LINK_TEXT, '亲,请登录')))
print("亲,请登录加载完成")
driver.find_element(By.LINK_TEXT, "亲,请登录").click()
label2 = WebDriverWait(driver, timeout, poll_frequency).until(
EC.visibility_of_element_located((By.CLASS_NAME, 'icon-qrcode')))
print("手动扫码加载完成")
driver.find_element(By.CLASS_NAME, "icon-qrcode").click()
time.sleep(10)
driver.get("https://cart.taobao.com/cart.htm")
label3 = WebDriverWait(driver, timeout, poll_frequency).until(EC.visibility_of_element_located((By.ID, 'J_SelectAll1')))
label4 = WebDriverWait(driver, timeout, poll_frequency).until(
EC.visibility_of_element_located((By.CLASS_NAME, 'submit-btn')))
COOMMEN_CONNECT_NUM = 10000000000
count3 = 1
while True:
try:
if driver.find_element(By.ID, "J_SelectAll1"):
driver.find_element(By.ID, "J_SelectAll1").click()
print("找到了全选按钮")
break
except:
count3 = count3 + 1
driver.refresh()
if count3 >= COOMMEN_CONNECT_NUM:
print("抢购失败:失败原因:没找到了全选按钮")
break
time.sleep(1)
count2 = 1
def timeToLong(valid_time):
dd = datetime.datetime.strptime(valid_time, '%Y-%m-%d %H:%M:%S.%f')
ts = int(time.mktime(dd.timetuple()) * 1000.0 + (dd.microsecond / 1000.0))
return ts
while True:
当前时间 = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")
t = timeToLong(抢购时间) - timeToLong(当前时间)
print("抢购倒计时%s" % (t))
if (t < 2505):
while True:
try:
if driver.find_element(By.CLASS_NAME, "submit-btn"):
print("找到了结算按钮")
driver.find_element(By.CLASS_NAME, "submit-btn").click()
break
except:
count2 = count2 + 1
driver.refresh()
if (count2 >= COOMMEN_CONNECT_NUM):
print("抢购失败:失败原因:没找到了结算按钮")
break
break
count = 1
try:
label5 = WebDriverWait(driver, timeout, poll_frequency).until(
EC.visibility_of_element_located((By.CLASS_NAME, 'go-btn')))
except:
print("提交订单的页面加载不出来抢购失败")
driver.refresh()
time.sleep(1)
while True:
提交订单时间 = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")
wucha = timeToLong(抢购时间) - timeToLong(提交订单时间)
try:
print("==========")
if driver.find_element(By.CLASS_NAME, "go-btn"):
if wucha < 1000:
print("找到了提交订单的按钮")
driver.find_element(By.CLASS_NAME, "go-btn").click()
thdingdanshijian = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")
print("提交订单时间%s" % thdingdanshijian)
print("抢购误差%s" % (timeToLong(thdingdanshijian) - timeToLong(抢购时间)))
print("抢购成功")
break
except:
count = count + 1
if count >= COOMMEN_CONNECT_NUM:
print("抢购失败:没找到了提交订单按钮")
break
time.sleep(1000)