使用fiddler抓包小程序再requets库定时预约座位

图书馆的座位每天凌晨12点放座位,每天半夜爬起来抢座严重影响休息,白天的学习效率也不高。于是我用学到的Python编程技术,自动预约座位解决这一难题。为了避免不必要的纠纷,仅做代码技术交流,文中被爬取网站的具体信息隐去。

  1. 第一步:使用fiddler抓包小程序

1、fiddler安装和调试这一步就不详细介绍了 ,很多帖子都有。我就安装这个帖子安装的。
fiddler安装调试教程
2:vx小程序抓包
小程序现在可以在客户端直接打开了,可以直接抓包电脑的通信数据包。
该lib的小程序在人工手动预约的时候需要输入手机验证码,但是通过抓包分析发现,它的最后的预约信息提交页面并不需要输入手机验证码,验证手机验证码仅仅是小程序中唤起最后的预约信息提交页面中间环节。我只需要找到最后的预约信息提交页面的网址,及相关的提交的表单信息就可以了。fiddler的强大的数据包解析功能,很好的帮我解决了这一问题。
通过一边人工操作,一边监视fiddler数据包。一步步操作排查,最终锁定了最后的预约信息提交页面的网址。打开该会话进行分析,inspectors-webforms能看到提交的信息,而inspectors-raw是提交的信息的post的写法,json能看返回的信息,相当于使用requests后返回的信息。
在这里插入图片描述
复制该会话inspectors-raw里的post内容,这是使用requests的post中需要的参数。

  1. 第二步:使用Python的requests库的post方法进行提交
    `
import requests
import time
import datetime

def bookingLib(date):
    url='confidential'
    headers={
        'Host': 'confidential',
        'Connection': 'keep-alive',
        'Content-Length': '593',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat',
        'content-type': 'application/x-www-form-urlencoded',
        'charset':'utf-8',
        'Referer':'confidential',
        'Accept-Encoding': 'gzip, deflate, br'
                }
    formData={
        'name': 'confidential',
        'idcard':'confidential',
        'phone':'confidential',
        'sex':'confidential',
        'add':'confidential',
        'openid':'confidential',
        'addrs':'confidential',
        'tiwen':'36',
        'date':date,
        'pic1':'',
        'pic2':'',
        'card':'',
        'activity':'',
        'seat':''
                }
    results=requests.post(url,data=formData,headers=headers).text
    return results`
在这里插入代码片

raw中抓包到的信息就是post()方法所需的参数headers和data,注意改写成字典格式就可以了。具体想预约哪一天,可以自己在data里修改date变量。

def timerBooking():
    #获取当天日期
    today=datetime.date.today()
    dayam0 = 'today.strftime("%Y-%m-%d") + '$上午'
    daypm0 = 'today.strftime("%Y-%m-%d") + '$下午'
    dayam1 = '(today+ datetime.timedelta(days=1)).strftime("%Y-%m-%d") + '$上午'
    daypm1 = '(today + datetime.timedelta(days=1)).strftime("%Y-%m-%d") + '$下午'
    dayam2 = '(today+ datetime.timedelta(days=2)).strftime("%Y-%m-%d") + '$上午'
    daypm2 = '(today + datetime.timedelta(days=2)).strftime("%Y-%m-%d") + '$下午'
    dates = [dayam0,daypm0,dayam1,daypm1,dayam2,daypm2]
    while len(dates)>0:
        for date in dates:
            try:
                if len(bookingLib(date).split('"')[11])<7:
                    print('成功',bookingLib(date))
                    dates.remove(date)
                else:
                    continue
            except:
                continue
#每执行完一个循环暂停5秒
        time.sleep(6)

  1. 第三步:定时执行任务
    使用while循环和time.sleep()设置每天零点定时执行任务。
if __name__ == '__main__':
    h=0
    m=0
    #使用while循环和time.sleep()设置每天零点定时执行任务。
    while True:
        now = datetime.datetime.now()
        if now.hour==h and now.minute==m:
            print(now)
            break
        else:
            time.sleep(3)
    timerBooking()
``
  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值