python+selenium 模拟网页点击抢购京东商品
首先惯例,虽然脚本只是模拟网页点击,并不是直接调用京东接口,所以并不会对京东的服务器产生破坏,但还是需要提前说一下使用声明
本账号发布的项目中涉及的任何脚本,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。 本项目内所有资源文件,禁止任何公众号、自媒体进行任何形式的转载、发布。 suarezz对任何脚本问题概不负责,包括但不限于由任何脚本错误导致的任何损失或损害. 间接使用脚本的任何用户,包括但不限于建立VPS或在某些行为违反国家/地区法律或相关法规的情况下进行传播, suarezz 对于由此引起的任何隐私泄漏或其他后果概不负责。 请勿将此项目的任何内容用于商业或非法目的,否则后果自负。 如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关脚本。 以任何方式查看此项目的人或直接或间接使用项目的任何脚本的使用者都应仔细阅读此声明。suarezz 保留随时更改或补充此免责声明的权利。一旦使用并复制了任何相关脚本或项目,则视为您已接受此免责声明。 您必须在下载后的24小时内从计算机或手机中完全删除以上内容。
python和selenium就不多介绍了,直接上代码
from selenium import webdriver import logging import time import datetime import sys from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.common.desired_capabilities import DesiredCapabilities print("请不要手动刷新此浏览器,也不要中途关闭当前浏览器,请提前设置你的购物地址,结算界面会选择默认的购物地址进行结算") #加启动配置 chrome_options = webdriver.ChromeOptions() chrome_options.add_experimental_option('excludeSwitches', ['enable-logging']) chrome_options.add_argument('--disable-gpu') # 上面代码就是为了将Chrome不弹出界面 chrome_options.add_argument('log-level=3')#INFO = 0 WARNING = 1 LOG_ERROR = 2 LOG_FATAL = 3 default is 0 capa = DesiredCapabilities.CHROME capa["pageLoadStrategy"] = "none" #懒加载模式,不等待页面加载完毕 #去除日志输出,懒加载的形式启动谷歌浏览器 driver = webdriver.Chrome(desired_capabilities=capa,options=chrome_options) #浏览器最大化 driver.maximize_window() #跳转到京东首页 driver.get("http://www.jd.com") WebDriverWait(driver, 20).until(expected_conditions.element_to_be_clickable((By.LINK_TEXT, '你好,请登录'))) driver.find_element_by_link_text("你好,请登录").click() print("即将跳转到登录页面,进入登录倒计时后再开始登录") time.sleep(1) title = driver.title #准备登陆 for i in range(0,60): if driver.title == title: print("请在%d秒内完成登录!" % (60 - i)) time.sleep(1) else: break print("完成登录,准备跳转到购物车界面") driver.get("https://cart.jd.com/cart.action") print("请输入抢购时间,精确到秒,示例2021-03-01 10:40:00,这是脚本开始抢购的时间,最好能提前半分钟左右,最后以回车确认") buytime = input() print("请在抢购时间到达之前保证你的购物车内内容为你需要抢购的内容,以免生成订单的内容和你需求不相符合") while True: now = datetime.datetime.now() title = driver.title if now.strftime('%Y-%m-%d %H:%M:%S') == buytime: for i in range(1, 10000): print("第%d次确认是否可以勾选" % i) if driver.find_element_by_name('select-all').is_selected()==0: driver.find_element_by_name('select-all').click() else: print("勾选商品成功") break for i in range(1, 10000): print("第%d次确认点击去结算" % i) if driver.find_element_by_name('select-all').is_selected() == 0: driver.find_element_by_name('select-all').click() WebDriverWait(driver, 20).until(expected_conditions.element_to_be_clickable((By.LINK_TEXT, '去结算'))) driver.find_element_by_link_text("去结算").click() if (driver.title == title): # 如果检测到title发生改变,即点击成功,跳出循环 time.sleep(0.01) else: print("结算成功,页面正在跳转") break WebDriverWait(driver, 20).until(expected_conditions.element_to_be_clickable( (By.ID,'order-submit'))) driver.find_element_by_id("order-submit").click() print('订购成功,订单生成成功,请自行付款')