Python-Requests模拟登录-实现图书馆座位自动预约

配置

通过公网主机定时运行脚本,并发送邮件到自己的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 = 
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值