2024-5-24
前几周一直因为抢不到羽毛球场而苦恼,因此主要想了两种思路来实现。
1.利用 requests 发送请求
这个方法不吃延迟,但是发送请求的 header 中有一项 wxkey 是动态变化的,需要用微信打开网页授权获得。
仍然未成功,显示【 false null null null】,可能是提交的内容不对
今晚用副管试试
2.利用 python 自动化实现
用机器模拟鼠标点击,识别网页因素,这种方法避免 wxkey 的获取,但成功率较低,吃网络延迟。
2024-5-25
利用第二种方法(自动化实现),引用python的selenium库,程序分为两大部分,定时与抢购的功能实现
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
#主要抢票功能实现
def bm_purchase(url,b):
struct_openTime = b
openTime = time.strptime(struct_openTime, "%Y-%m-%d %H:%M:%S")
openTime = time.mktime(openTime)
request_cnt = 0
while True:
# nowTime = int(time.mktime(time.localtime()))
a = time.localtime(time.time())
a1 = time.strftime("%Y-%m-%d %H:%M:%S", a)
print(a1, end=' ')
print(struct_openTime)
if time.time() >= openTime:
driver = webdriver.Edge()
driver.get(url)
driver.find_element(by=By.XPATH, value='//*[@id="48"]').click()
driver.find_element(by=By.XPATH, value='/html/body/div[1]/section/div[3]/div/a[3]').click()
driver.find_element(by=By.XPATH, value='//*[@id="buttonsubmit1"]').click()
if __name__=='__main__':
url = r'https://26501.koksoft.com/weixinordernewv7.aspx?wxkey=153DC84BBF7CABBB49618F7ED48D5A310A30AB1DF70AD3A9079EFA9C7B7114A8E18FE0CAB00BFCE3E03AC7D9F37CF80833EDA9EA35FC70BDC979922C0760136629D44D39056C957A2152255A1452B241E54CD45B5F0EA648755EBDAD4300F61B0876572007BCD5345F4431DC89C2D6D8&lxbh=Y&orderdate=2024-05-26'
time1 = "2024-5-26 8:00:00"
bm_purchase(url,time1)
input()
短暂试了一下,发现有点吃网络延迟,明天抢票试一下
效果视频python的selenium库_哔哩哔哩_bilibili
2024-5-26
一:利用selenium模拟,在7:59:50定时打开网页,却发现因为网络延迟,网页无法加载出来,在8:01左右,才能正常开抢,效率很低,并且需要不停更换场地id
优点倒是代码简单
二:转而思考reques这种不需打开网页的方法,利用后台直接发送post请求
但不知为何,回应的总是【false,null,null,null】,思索后应该是自己提交表单里的searchparam不对,是url解码后的
再试已经被该网址屏蔽,换ip和换useragent都没有,大概是屏蔽了我的校园网账户,恶意请求场地
晚一会再试试