秀某动预约抢票脚本
小白操作-仅供学习参考
主要流程和功能
- 初始化和配置变量:
-
confirm_url 和 login_url: 分别存储登录和确认订单的URL。
-
wait_time: 用户输入的提前多少秒开始执行。
-
start_time: 开售时间。
-
DEBUG: 调试标志,用于控制脚本的行为。
- 浏览器自动化:
-
配置Chrome浏览器的性能和日志记录设置。
-
进行浏览器操作,自动登录,并获取特定按钮进行点击。
- 网络请求:
-
捕获通过浏览器发出的请求并记录其详情。
-
保存请求的URL、POST数据和头部到本地文件。
- 发起并发请求:
-
使用gevent和requests库发送存储好的请求。
-
使用hashlib来计算请求的签名。
- 异常处理:
- 捕捉并打印错误堆栈,以便调试。
- 多线程和定时控制:
-
在预定时间开始前的指定秒数开始执行并发请求。
-
使用
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)):
break
gevent.joinall(thread_l)
-
gevent 和 monkey: 这是用于并发编程的库,monkey.patch_all() 是将标准库中适合的部分做上猴子补丁,使得它们变得异步化。
-
selenium: 用于自动化网页操作,如点击、输入文本等。
-
requests: 用于发送HTTP请求。
-
hashlib: 提供了一个强大的字符串哈希功能,通常用于加密操作。