更新:
实际操作中,有些热销的会在0.几s内就没货了,脚本还是抢不过,只能说比你手动抢快一些; 对于热销的,可能还是需要脚本多线程,多账户一起抢才有可能。
更新:
对平台选择时输入的数字进行转化,int(a),不然输入数字后都只打开jingdong,不执行taobao
打印出错的信息,并且添加return 防止循环一直执行
Python代码:
#-*-coding:utf8;-*- ''' 实现购物平台商品定点抢购,原理:只要成功提交了订单不管付不付款,都占了一个名额(网上说的) 代码依赖selenium库,pip install selenium ,查看谷歌浏览器版本号,下载对应的chromedriver放在python3根目录 https://chromedriver.storage.googleapis.com/index.html https://googlechromelabs.github.io/chrome-for-testing/ 注意: ①代码运行前:修改代码下半部分的 抢购时间、京东的支付密码(我的京东提交订单的时候是需要输密码的);修改--user-data-dir路径并取消注释,可以用你配置登录好的google。 ②将要抢购的商品加入购物车,代码运行后自动打开官网,然后需要你扫码登录打开购物车界面,商品处于未选中的状态,然后在开始销售之前1min左右,cmd按回车开始抢购 ③实战的时候先打开淘宝、京东的小额免密支付更湿滑,测试的先关掉免密支付,不然你就真下单了。 ④京东,由于系统与网速的原因,勾选商品的时候反应很慢,很容易出错,代码已经尽可能考虑到这一点了,大佬请再修改 ⑤代码会每隔0.2s判断是否到了抢购时间,但是有时会出错,到了时间也不执行抢购的代码,原因未知,试了多种写法都不能100%成功 代码出错请不要反馈@我,自行修改;大佬给出代码改进的意见,多多益善;代码很简单,但在实际运行中就会出现意想不到的状态 ''' from datetime import datetime import time from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver import ChromeOptions from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC option = webdriver.ChromeOptions() option.add_experimental_option('excludeSwitches', ['enable-logging','enable-automation']) #usb_device_handle_win.cc:1048 Failed to read descriptor from node connection: 连到系统上的设备没有发挥作用 # 忽略无用的日志 option.add_experimental_option('useAutomationExtension', False) #关闭“chrome正受到自动测试软件的控制” option.add_experimental_option("detach", True) #不自动关闭浏览器 option.add_argument('-ignore-certificate-errors') #ERROR:ssl_client_socket_ handshake failed的解决方法 option.add_argument('-ignore -ssl-errors') #ERROR:ssl_client_socket #option.add_argument("--user-data-dir="+r"C:\Users\c****cal\Google\Chrome\User Data") def taobao(t,driver): while True: now = datetime.now() # 对比时间,时间到的话就点击结算 if now >= t: try: driver.find_element(By.XPATH,"//label[text()='勾选购物车内所有商品']").click() WebDriverWait(driver,15).until(EC.element_to_be_clickable((By.XPATH,"//a[@id='J_Go']/span"))).click() #点击结算 tijiao = WebDriverWait(driver,90).until(EC.visibility_of_element_located((By.XPATH,"//a[@title='提交订单']"))) tijiao.click() print('已提交订单,请付款...') return except Exception as e: print('出错,请手动操作下面的步骤') print(e) return print(now) time.sleep(0.2) def jindong(t,driver,password): while True: now = datetime.now() #now = datetime.now().timestamp() # 对比时间,时间到的话就点击结算 if now >= t: try: for v in driver.find_elements(By.XPATH,"//input[@name='checkShop']"): #点击购物车中所有的商品 v.click() WebDriverWait(driver,10).until(EC.element_to_be_selected(v)) sum = driver.find_element(By.XPATH,"//span[@class='amount-sum']/em") if int(sum.text) > 0: driver.find_element(By.XPATH,"//a[contains(text(),'去结算')]").click() #点击结算 tijiao = WebDriverWait(driver,90).until(EC.presence_of_element_located((By.XPATH,"//button[@type]/b"))) #输入支付密码 for x,y in enumerate(driver.find_elements(By.XPATH,"//div[@id='quark-pw-list']/i")): z = int(password[x]) ActionChains(driver).move_to_element(y).click().send_keys(z).perform() time.sleep(0.1) tijiao.click() #点击提交订单 print('已提交订单,请付款...') return except Exception as e: print('出错,请手动操作下面的步骤') print(e) return print(now) time.sleep(0.2) if __name__ == "__main__": dt = datetime(2024,2,4,14,8,0,0) #修改抢购时间不要有前导0,代表2024-2-4 14:8:00 a = input('淘宝请输入1,京东请输入2:') print(f'抢购时间:{dt}') driver = webdriver.Chrome(options=option) driver.maximize_window() if int(a) == 1: #打开淘宝 driver.get('https://www.taobao.com/') input('扫码登录打开购物车页面,商品处于未选中的状态,然后在开始销售之前1min左右,按回车开始抢购...') taobao(dt,driver) else: #打开京东 driver.get('https://www.jd.com/') jdpassword = '123456' #修改成你的京东的支付密码,京东在提交订单的时候需要输入支付密码 input('扫码登录打开购物车页面,商品处于未选中的状态,然后在开始销售之前1min左右,按回车开始抢购...') jindong(dt,driver,jdpassword)
版权声明:本文内容均来源于互联网 如有侵权联系删除