没有合适的资源?快使用搜索试试~ 我知道了~
首页Python Requests模拟登录实现图书馆座位自动预约
Python Requests模拟登录实现图书馆座位自动预约
1.4k 浏览量
更新于2023-05-28
评论 3
收藏 70KB PDF 举报
主要为大家详细介绍了Python Requests的模拟登录,Python实现图书馆座位自动预约,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
资源详情
资源评论
资源推荐

Python Requests模拟登录实现图书馆座位自动预约模拟登录实现图书馆座位自动预约
主要为大家详细介绍了Python Requests的模拟登录,Python实现图书馆座位自动预约,具有一定的参考价值,感兴趣的小伙伴们可以参
考一下
本文实例为大家分享了Python实现图书馆座位自动预约的具体代码,供大家参考,具体内容如下
配置配置
通过公网主机定时运行脚本,并发送邮件到自己的qq邮箱,这样在微信就会有消息提示是否预约成功
vim /etc/crontab
设置每到早上7:01自动运行脚本即可
程序流程程序流程
(以yuyue.juneberry.cn网站为例)
get访问登录页面,获取cookie和表单里面的隐藏post字段
构造登录post数据,加入从表单里面拿到的隐藏post字段
post构造后的数据,模拟登录,激活cookie(使cookie有登入权限)
get访问座位预约界面,激活cookie(使cookie有预约座位权限)
post预约请求,实现预约座位
解析返回结果,判断是否成功,并邮件提醒
要点要点
requests库中的requests.session() 能够创建可传递cookies的会话
拿到<input type=hidden>的数据并传递到post的数据中
抓包判断网站逻辑,筛选出各个请求的参数,并在程序中实现
函数解释函数解释
class FUCK()主类
_get_date_str(self):获取当前日期,并加上一天,用这个函数构造url的特征字段(图书馆设置提前一天预约座位)
def _get_order_url(self):构造"预约座位"的post目标url
def _get_static_post_attr:这个函数解析get请求的返回页面,并从中提取出<input type=hidden>的字段,用于之后的构造post数据
def login(self):实现登录功能
def run(self):实现座位预约功能
def _is_success(self, text):判断预约结果
def error_log_once(self, text='default error (once)'):
def error_log(self, text='default error'):这两个函数设置程序状态为"已经出错"或者"未出错"状态(用于自动化运行的时候避免将重复的错误信息写
入日志)
def error_log(self, text='default error'):单次将错误信息写入本地日志
sendmail.send_mail()邮件发送模块
代码及注释代码及注释
# /bin/python
# -*- coding:utf-8 -*-
import time
import sys
import requests
from bs4 import BeautifulSoup
from mail import sendmail
__author__ = 'xy'
# 主类
class FUCK():
def __init__(self, username, password, seatNO, mailto):
"""
以四个参数初始化,用户名,密码,要预约的座位号,接受预约结果提醒邮件的邮箱
"""
self.username = username
self.password = password
self.seatNO = seatNO
self.mailto = mailto
self.base_url = 'http://yuyue.juneberry.cn'
self.login_url = 'http://yuyue.juneberry.cn'
self.order_url = self._get_order_url()
self.login_content = ''
self.middle_content = ''
self.final_content = ''
self.s = requests.session() # 创建可传递cookies的会话
# post data for login
self.data1 = {
'subCmd': 'Login',
'txt_LoginID': self.username, # S+学号
'txt_Password': self.password, # 密码
'selSchool': 60, # 60表示北京交通大学
}
# post data for order a seat
self.data2 = {
'subCmd': 'query',
}




















weixin_38692162
- 粉丝: 4
- 资源: 906
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制

评论0