irpas技术客

运用selenium库写淘宝抢购详解【3】(文末附带源码)_UR的出不克_selenium 淘宝

irpas 1581

#每日一更【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://·") 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://·") 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")

#每日一更


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #selenium #淘宝