Python实现淘宝抢单
代码逻辑解析:
时间设置:
mstime
设置了抢购时间。当前系统时间在循环中不断与该时间进行比较,当达到或超过抢购时间时,程序会开始执行结算和提交订单操作。
购物车全选:
- 程序首先会在购物车页面找到“全选”按钮,点击以全选购物车中的所有商品。通过
WebDriverWait
保证页面加载完成后再进行操作。
- 程序首先会在购物车页面找到“全选”按钮,点击以全选购物车中的所有商品。通过
结算操作:
- 程序会等待页面中的“结算”按钮出现,然后使用
ActionChains
模拟鼠标悬停并点击该按钮。
- 程序会等待页面中的“结算”按钮出现,然后使用
提交订单操作:
- 在结算成功后,程序会寻找“提交订单”按钮并执行点击操作。
循环检测时间:
- 程序会不断监控当前系统时间,当达到设定的抢购时间后执行抢购流程。
关键点:
ActionChains
模拟鼠标悬停:淘宝的部分按钮(如“结算”)只有在鼠标悬停时才会显示,因此使用ActionChains.move_to_element()
模拟用户悬停行为。- 循环检查当前时间:程序会持续检查时间,并在抢购时间到达后执行下一步操作。
WebDriverWait
:确保元素加载完成后再进行交互,避免因为页面还没完全加载而找不到元素。
需要注意的事项:
- Xpath 的稳定性:淘宝页面的结构可能会随着更新而改变,确保 XPath 在页面变动后依然有效。如果发现某些元素找不到,可以通过浏览器的开发者工具重新获取 XPath。
- 登录状态:程序启动后,用户需要手动扫码登录,以确保后续的自动化操作可以顺利进行。
代码实现
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
import datetime
from selenium import webdriver
import time
# 获取当前时间并设置抢购时间
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
mstime = "2024-09-12 10:08:00.000000" # 设置时间为要抢货的时间
print(f"当前时间: {now}, 预定抢购时间: {mstime}")
# 初始化WebDriver
WebBrowser = webdriver.Chrome()
# 打开淘宝首页
print("正在打开淘宝...")
WebBrowser.get("https://www.taobao.com")
WebBrowser.maximize_window() # 使窗口最大化,防止部分元素不显示
time.sleep(5) # 等待页面加载
# 点击登录链接
print("正在点击登录链接...")
WebBrowser.find_element(By.LINK_TEXT, "亲,请登录").click()
print("请扫码登录")
time.sleep(10) # 等待手动扫码登录
# 跳转到购物车页面
print("跳转到购物车页面...")
WebBrowser.get("https://cart.taobao.com/cart.htm")
# 等待购物车页面完全加载
print("等待购物车页面加载完成...")
WebDriverWait(WebBrowser, 10).until(
EC.presence_of_element_located((By.ID, "listContainer_1"))
)
print("购物车页面加载完成")
# 尝试点击全选按钮
while True:
try:
print("查找全选按钮...")
# 查找全选按钮的 XPath,注意这个路径可能会变
if WebBrowser.find_element(By.XPATH, "/html/body/div[4]/div[2]/div[2]/div/div[1]/div/div/div[1]/div/div/div[2]/label/span[1]/input"):
print("找到全选按钮,正在点击全选按钮...")
element = WebDriverWait(WebBrowser, 10).until(
EC.presence_of_element_located(
(By.XPATH,
"/html/body/div[4]/div[2]/div[2]/div/div[1]/div/div/div[1]/div/div/div[2]/label/span[1]/input"))
)
element.click() # 点击全选按钮
print("全选按钮点击成功")
break
except Exception as e:
print(f"找不到全选按钮: {e}")
# 循环检查当前时间,等待抢购时间到达
while True:
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
print(f"当前时间: {now}")
# 如果当前时间超过抢购时间,开始执行抢购操作
if now > mstime:
print("时间已到,开始抢购流程...")
# 尝试点击“结算”按钮
while True:
try:
print("查找结算按钮...")
if WebBrowser.find_element(By.XPATH, "//*[text()='结算']"):
my_taobao = WebDriverWait(WebBrowser, 10).until(
EC.presence_of_element_located((By.XPATH, "//*[text()='结算']"))
)
print(f"找到结算按钮: {my_taobao}")
# 使用ActionChains模拟鼠标悬停并点击
actions = ActionChains(WebBrowser)
actions.move_to_element(my_taobao).pause(1).click().perform()
print("结算按钮点击成功")
time.sleep(1)
break
except Exception as e:
print(f"结算按钮点击失败: {e}")
# 尝试点击“提交订单”按钮
while True:
try:
print("查找提交订单按钮...")
if WebBrowser.find_element(By.XPATH, "//*[text()='提交订单']"):
submit_button = WebDriverWait(WebBrowser, 10).until(
EC.presence_of_element_located((By.XPATH, "//*[text()='提交订单']"))
)
print(f"找到提交订单按钮: {submit_button}")
# 使用ActionChains模拟鼠标悬停并点击
actions.move_to_element(submit_button).pause(1).click().perform()
print("提交订单按钮点击成功,抢购成功,请尽快付款")
time.sleep(1)
break
except Exception as e:
print(f"提交订单按钮点击失败: {e}")
print(f"结算提交成功,已抢到商品,请及时支付订单")
break
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 David
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果