import requests
import time
import random
在大多数电商网站上进行抢购操作是需要先登录的,因此我们需要在代码中模拟登陆,获取登录状态和cookie值,以保证后续的请求能被网站识别为合法或已登录用户。下面是一个以模拟登陆为主要内容的例子:
def login(username, password):
headers = {
"Accept": "*/*",
"Connection": "keep-alive",
"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"
}
session = requests.Session()
# 获取并保存cookie
session.get("https://www.seu.edu.cn/", headers=headers)
with open('cookies.txt', 'w') as f:
cookie = ''
for item in session.cookies.items():
cookie += item[0] + '=' + item[1] + ';'
f.write(item[0] + ':' + item[1] + '\n')
# 登录
post_url = 'https://www.seu.edu.cn/jsonLogin'
post_data = {
'username': username,
'password': password,
'imgCode': ''
}
login_response = session.post(post_url, data=post_data, headers=headers)
print(login_response.text)
return session
其中`username`和`password`是你在该网站注册的账户和密码。此处以东南大学校园网站进行演示,由于该网站开启了SSL,因此我们需要在代码中关闭SSL证书验证:
requests.packages.urllib3.disable_warnings()
需要注意在提交订单时需要的各种参数(如地址、付款方式等)以及确认和检查页面。
def submit_order(session, order_data):
headers = {
"Accept": "*/*",
"Connection": "keep-alive",
"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.seu.edu.cn/",
"Origin": "https://www.seu.edu.cn",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"
}
submit_url = 'https://www.seu.edu.cn/submitOrder'
response = session.post(submit_url, data=order_data, headers=headers, verify=False)
print(response.text)
注意其中`order_data`是提交订单需要的所有参数。
由于商品只会在具体时间段内出售,因此需要控制脚本的执行时间。可以使用Python中time库的`time.sleep()`函数实现等待功能。
def countdown(time_set):
while True:
current_time = time.strftime("%H:%M:%S")
if current_time >= time_set:
break
time.sleep(1)
在抢购开始前遍定一个结束时间,每隔一秒钟检查一遍当前时间是否达到结束时间,直到时间到达后就跳出息循环,开始执行购买。
最后,我们可以把以上定义的函数整合起来,并调用它们来模拟登陆和提交订单。以下是示例代码:
if __name__ == '__main__':
session = login('your_username', 'your_password')
target_time = '14:00:00'
countdown(target_time)
order_data = {
# 填写订单数据
}
submit_order(session, order_data)
注:最后一个参数`order_data`是需要构造的订单数据。具体填写方法需要根据不同的网站而定。