当前位置: 首页 > news >正文

秀某动预约抢票脚本

秀某动预约抢票脚本

小白操作-仅供学习参考
在这里插入图片描述

主要流程和功能

  1. 初始化和配置变量:
  • confirm_url 和 login_url: 分别存储登录和确认订单的URL。

  • wait_time: 用户输入的提前多少秒开始执行。

  • start_time: 开售时间。

  • DEBUG: 调试标志,用于控制脚本的行为。

  1. 浏览器自动化:
  • 配置Chrome浏览器的性能和日志记录设置。

  • 进行浏览器操作,自动登录,并获取特定按钮进行点击。

  1. 网络请求:
  • 捕获通过浏览器发出的请求并记录其详情。

  • 保存请求的URL、POST数据和头部到本地文件。

  1. 发起并发请求:
  • 使用gevent和requests库发送存储好的请求。

  • 使用hashlib来计算请求的签名。

  1. 异常处理:
  • 捕捉并打印错误堆栈,以便调试。
  1. 多线程和定时控制:
  • 在预定时间开始前的指定秒数开始执行并发请求。

  • 使用gevent来管理并发执行的worker函数。

  • 时间控制逻辑:

if(t1-time.time()<float(wait_time)):
break
部分代码

from gevent import monkey
monkey.patch_all()wait_time = input("提前时间(秒):")debug_flag = input("从post_list加载账号(2开启并继续添加 1开启 0关闭):")start_time = input("开售时间(格式:2020 10 06 16 00 10):")DEBUG = int(debug_flag)if DEBUG != 1:times = input("账号数量:")
confirm_url = input("confirm_url:")
caps = {'browserName': 'chrome','loggingPrefs': {'browser': 'ALL','driver': 'ALL','performance': 'ALL',},'goog:chromeOptions': {'perfLoggingPrefs': {'enableNetwork': True,},'w3c': False,},
}
caps['goog:loggingPrefs'] = {'performance': 'ALL'}
options = webdriver.ChromeOptions()
options.add_argument('log-level=3')
options.add_argument('--window-size=400,700')
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option("mobileEmulation", {"deviceName": "Nexus 5"})
driver = webdriver.Chrome(desired_capabilities=caps, options=options)if DEBUG == 2:with open('post_list.json', 'r') as f:post_list = json.load(f)
else:
post_list = []if __name__ == '__main__':thread_l = list()
for i in post_list:thread_l.append(gevent.spawn(worker, i=i))
# 处理时间
t1 = time.mktime(time.strptime(start_time, "%Y %m %d %H %M %S"))
while(1):if(t1-time.time()<float(wait_time)):breakgevent.joinall(thread_l)
  • gevent 和 monkey: 这是用于并发编程的库,monkey.patch_all() 是将标准库中适合的部分做上猴子补丁,使得它们变得异步化。

  • selenium: 用于自动化网页操作,如点击、输入文本等。

  • requests: 用于发送HTTP请求。

  • hashlib: 提供了一个强大的字符串哈希功能,通常用于加密操作。

相关文章:

  • 几个速度比较快的 Linux 开源镜像站
  • kubectl详解
  • Python TCP编程简单实例
  • c语言,java语言,python语言之间有什么区别
  • 解决updateByExample时属性值异常的问题(部分属性值没有使用占位符?进行占位,而是变成了属性的名称)
  • MyBatis入门——MyBatis XML配置文件(3)
  • CompletableFuture的主要用途是什么?
  • 国内医疗数据安全依然严峻,去年约9000万条数据泄露
  • python数据类型之字符串
  • [4]CUDA中的向量计算与并行通信模式
  • 传感器通过Profinet转Modbus网关与PLC通讯在生产线的应用
  • 力扣226.翻转二叉树101.对称二叉树
  • 如何将Windows PC变成Wi-Fi热点?这里提供详细步骤
  • 纯前端实现截图功能
  • 微信小程序之九宫格抽奖
  • 2019年如何成为全栈工程师?
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • java中的hashCode
  • JS变量作用域
  • orm2 中文文档 3.1 模型属性
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Vim Clutch | 面向脚踏板编程……
  • vue 个人积累(使用工具,组件)
  • 不上全站https的网站你们就等着被恶心死吧
  • 搭建gitbook 和 访问权限认证
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 模型微调
  • 前端工程化(Gulp、Webpack)-webpack
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 写给高年级小学生看的《Bash 指南》
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (层次遍历)104. 二叉树的最大深度
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (一)Neo4j下载安装以及初次使用
  • (一)基于IDEA的JAVA基础12
  • ******之网络***——物理***
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .NET值类型变量“活”在哪?
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @GetMapping和@RequestMapping的区别
  • @property @synthesize @dynamic 及相关属性作用探究
  • [ 数据结构 - C++] AVL树原理及实现
  • [\u4e00-\u9fa5] //匹配中文字符
  • [14]内置对象
  • [20160807][系统设计的三次迭代]
  • [BZOJ 4598][Sdoi2016]模式字符串