运用selenium库写淘宝抢购详解【3】(文末附带源码)
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
#每日一更【3】
今天讲的是用selenium库写一个淘宝抢购程序10.19亲测可用
1.淘宝抢购的思路和上一篇的思路类似通过打开浏览器筛选浏览器内的标签并点击来实现自动化
#下面来想一下思路
1.先打开淘宝的官网点击登录
2.账号的登录
3.打开我的购物车
3.计算时间对购物车进行提交
4.付款当我们提交了商品付款东西就是我们的了只要在规定时间内付款就行
2.每个思路的实现
1.导入模块
from selenium.webdriver.common.by import By
from selenium import webdriver
创建浏览器页面并打开这里我用的Chrome
#Chrome有很多好的扩展打开的页面也很快
driver = webdriver.Chrome()
driver.maximize_window()
对页面进行get请求淘宝网的链接找到登录的文本用selenium里的筛选功能
筛选文本TEXT“亲请登录”然后点击就可以进入到登录的页面
#注意链接载入到浏览器需要时间导入time模块使休眠3秒钟
import time
driver.get("https://www.taobao.com")
time.sleep(3)
做一个小的检测检测“亲请登录”是否加载完毕
if driver.find_element(By.LINK_TEXT, "亲请登录"):
driver.find_element(By.LINK_TEXT, "亲请登录").click()
这样我们就打开了第二个链接到了账号登录的环节
我们要通过扫码登录所以要点击右上角的二维码通过xpath定位还是比较好找的
给我们预留了三十秒的扫码确定时间
driver.find_element(By.XPATH,'//*[@id="login"]/div[1]/i').click()
print("请在30秒内完成扫码")
time.sleep(30)
#我们是通过selenium自动化模块进行操作的从头到尾在一个真实的浏览器中
可以记录我们的cookie不用重复登录
2.当等待了三十秒后我们就可以向购物车页面发送请求并等待三秒钟
https://cart.taobao.com/cart.htm
url3 = "https://cart.taobao.com/cart.htm" # 淘宝购物车
driver.get(url3)
time.sleep(3)
打开购物车页面后对商品进行全选然后写时间的判断时间一到就点击付款按钮
#这里我们用到datetime模块
获取实时的时间并与我们要抢的商品时间进行对比时间一到对付款点击最快的取得商品
可以看得到时间的刷新非常快速所以我们很容易就可以抢到商品
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
# 对比时间时间到的话就点击结算
if now >= buytime:
print("与预定时间1进行比较")
对时间的判定结束后第一时间点击结算这里用while循环加一个报错异常处理
因为页面不会时间一到就给出结算的链接不加异常处理得话也是会报错的代码如下
try:
# 点击结算按钮
# if driver.find_element(By.ID, "J_Go"):
if driver.find_element(By.XPATH, '//*[@class="submit-btn"]/span'):
driver.find_element(By.XPATH, '//*[@class="submit-btn"]/span').click() # 结算
print("程序锁定商品,结算成功")
break
except:
time.sleep(0.001)
3.这样我们的代码就差不多写完了已经是一个合格抢购脚本了基本能够满足我们的需求
但是依旧会报错作为一个合格的程序员仍需要将报错改掉并优化代码结构
#完整代码如下
from selenium.webdriver.common.by import By
from selenium import webdriver
import datetime
import time
driver = webdriver.Chrome()
driver.maximize_window()
def login():
# 打开淘宝登录页并进行扫码登录
driver.get("https://www.taobao.com")
time.sleep(3)
if driver.find_element(By.LINK_TEXT, "亲请登录"):
driver.find_element(By.LINK_TEXT, "亲请登录").click()
driver.find_element(By.XPATH,'//*[@id="login"]/div[1]/i').click()
print("请在30秒内完成扫码")
time.sleep(30)
url3 = "https://cart.taobao.com/cart.htm" #淘宝购物车
driver.get(url3)
time.sleep(3)
# 点击购物车里全选按钮
if driver.find_element(By.ID,"J_SelectAll1"):
driver.find_element(By.ID,"J_SelectAll1").click()
else:
print("找不到购买按钮,请手动点击商品")
now = datetime.datetime.now()
print('login success:', now.strftime('%Y-%m-%d %H:%M:%S:%f'))
def buy(buytime):
while True:
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
# 对比时间时间到的话就点击结算
if now >= buytime:
print("与预定时间1进行比较")
while True:
try:
# 点击结算按钮
if driver.find_element(By.XPATH, '//*[@class="submit-btn"]/span'):
driver.find_element(By.XPATH, '//*[@class="submit-btn"]/span').click() #结算
print("程序锁定商品,结算成功")
break
except:
time.sleep(0.001)
# 点击提交订单按钮
while True:
try:
# time.sleep(1)
if driver.find_element(By.XPATH, '//*[@id="submitOrderPC_1"]/div/a[2]'):
driver.execute_script('window.scrollBy(0,250)')
driver.find_element(By.XPATH, '//*[@id="submitOrderPC_1"]/div/a[2]').click() #提交订单
print("订单提交成功")
break
except:
time.sleep(0.01)
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
print("已经抢到商品啦抢到的时间" + now)
break
print("当前时间:" + now)
time.sleep(0.01)
if __name__ == "__main__":
login()
buy("2022-10-19 23:22:00.000000")
#每日一更