帮我写一个python的大麦抢演唱会门票的脚本,反爬
时间: 2023-08-28 16:35:00 浏览: 181
为了应对大麦网的反爬措施,我们需要在脚本中添加一些反反爬措施,下面是一个带有反爬措施的Python脚本,供您参考。
```python
import requests
import time
import random
import re
# 设置请求头,模拟浏览器访问
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
"Referer": "https://www.damai.cn/",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
}
# 登录页面URL
login_url = "https://passport.damai.cn/login"
# 抢票页面URL
ticket_url = "https://detail.damai.cn/item.htm?id=123456" # 活动页面的URL
# 登录信息
username = "your_username"
password = "your_password"
# 登录会话
session = requests.Session()
# 获取登录页面HTML
login_page = session.get(login_url, headers=headers)
# 解析登录页面HTML,获取登录表单的CSRF Token
csrf_token = re.findall(r'name="csrf_token" value="(.*?)"', login_page.text)[0]
# 提交登录表单
login_data = {
'username': username,
'password': password,
'isKeepAlive': 'false',
'rememberMe': 'true',
'loginType': '1',
'verifyCode': '',
'nloginpwd': '',
'nloginmk': '',
'loginMK': '',
'idcardType': '',
'certNo': '',
'certType': '',
'mobile': '',
'token': '',
'ua': '',
'dv': '',
'authcode': '',
'psdk-d': '',
'psdk-i': '',
'psdk-v': '',
'psdk-t': '',
'psdk-r': '',
'psdk-b': '',
'psdk-k': '',
'psdk-e': '',
'psdk-c': '',
'psdk-a': '',
'psdk-s': '',
'psdk-p': '',
'psdk-o': '',
'psdk-n': '',
'psdk-h': '',
'psdk-g': '',
'psdk-f': '',
'psdk-j': '',
'psdk-q': '',
'psdk-m': '',
'psdk-l': '',
'psdk-z': '',
'psdk-y': '',
'psdk-x': '',
'psdk-w': '',
'psdk-u': '',
'captcha': '',
'csessionid': '',
'sig': '',
'scene': '',
'token': '',
'callback': '',
'csrf_token': csrf_token,
}
login_response = session.post(login_url, data=login_data, headers=headers)
print(login_response.content.decode('utf-8'))
# 抢票循环
while True:
# 获取抢票页面HTML
ticket_page = session.get(ticket_url, headers=headers)
# 解析HTML,获取剩余票数
tickets_left = 0
if '抢票' in ticket_page.text: # 如果还有票,才能继续抢购
tickets_left = 1
# 如果还有票,立即抢票
if tickets_left > 0:
# 随机等待一段时间,模拟人的操作
time.sleep(random.randint(1, 3))
# 获取抢票链接并提交订单
link = re.findall(r'<a href="(.*?)">抢票</a>', ticket_page.text)[0]
order_url = 'https:' + link.replace('verifycode', 'confirm')
order_data = {
'buyNum': '1',
'id': '123456',
'price': '0',
'projectId': '123456',
}
order_response = session.post(order_url, data=order_data, headers=headers)
print(order_response.content.decode('utf-8'))
# 如果提交订单成功,退出抢票循环
if '订单提交成功' in order_response.text:
print("抢票成功!")
break
else:
print("正在等待新的票源...")
time.sleep(1) # 等待1秒后重试
```
请注意,此脚本仅供参考,实际操作中可能会遇到许多意外情况,请谨慎使用。另外,本脚本仅作为学习交流之用,不可用于任何商业用途。
阅读全文