目前中国许多大学图书馆座位有限,无法容纳全部学生学习要求,所以许多大学的图书馆会采用在网上抢座的形式来分配座位,而抢的人太多了就会导致抢不上,所以我用python实现了图书馆抢座系统,这个系统输入开始时间、结束时间、账号和密码就可以自动抢座。

在这里我们使用selenium库在模仿登录,登录成功后使用get_cookies()方法就可以获取登录后的cookies,随后在预定座位时带上这个cookies就可以成功预定。我们学校登录需要验证码,验证码是一个计算式,所以我先用tesserocr识别,在计算得到结果。整个实现过程就是这样,具体细节就不过多阐述。代码稍微修改一下就可以使用。

import tesserocr
from PIL import Image
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import base64
import requests
import json
import time
import datetime
from datetime import date, timedelta# 定义预定函数
def booking(cookie, start, end, start_time, end_time, dev_id):while True:try:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.44','Cookie': cookie}params = {'dialogid':'','dev_id': dev_id,'lab_id': '','kind_id': '','room_id': '','type': 'dev','prop': '','test_id': '','term': '','number': '','classkind': '','test_name': '','start': start,'end': end,'start_time': start_time,'end_time': end_time,'up_file': '','memo': '','act': 'set_resv','_': '1636532955267'}url = '填上预定网址're = requests.get(url=url, headers=headers, params=params)res = json.loads(re.text)msg = res['msg']print(msg)if msg == '操作成功!':return 1if msg == '当前时间预约冲突':return 2except:pass# 传入验证码图片(.png)返回结果
def validate_result(image_url):image = Image.open(image_url)validate_formula = list(tesserocr.image_to_text(image))print(validate_formula)if len(validate_formula) < 3:print('验证码读取失败,请等待')return Noneelse:del validate_formula[len(validate_formula) - 1]del validate_formula[len(validate_formula) - 1]del validate_formula[len(validate_formula) - 1]del validate_formula[len(validate_formula) - 1]validate_formula = ''.join(validate_formula)#print(validate_formula)validate_result = eval(validate_formula)#print(validate_result)return validate_result# 定义函数取得cookies
def get_cookie(id, password):while True:try:chrome_options = webdriver.ChromeOptions()chrome_options.add_argument('__headless')driver = webdriver.Chrome(options=chrome_options)driver.get(r'登录页面网址')time.sleep(10)# 获取图片base64编码img_base64 = driver.find_element_by_xpath(r'//div[@class="index-captcha-2FKeU"]/img').get_attribute('src')# 去除base64编码中的不需要字符img_base64 = img_base64.replace('%0A', '')new_img_base64 = img_base64.replace('data:image/png;base64,', '')# 将图片解码保存img_file = open('test.png', 'wb')#print(new_img_base64)img_file.write(base64.b64decode(new_img_base64))img_file.close()# 调用函数获取验证码结果validate_number = validate_result('test.png')if validate_number is None:passelse:input_username = driver.find_element_by_id('userName')input_username.send_keys(id)input_password = driver.find_element_by_id('password')input_password.send_keys(password)input_validate = driver.find_element_by_id(r'captcha')input_validate.send_keys(validate_number)login_button = driver.find_element_by_class_name('ant-btn')login_button.click()time.sleep(10)cookie_items = driver.get_cookies()cookie_str = ""#组装cookie字符串for item_cookie in cookie_items:item_str = item_cookie["name"]+"="+item_cookie["value"]cookie_str += item_str#打印出来看一下return cookie_strexcept:passdef main(dev_id, start_time, end_time, id, password):cookies = get_cookie(id, password)print(cookies)today = datetime.date.today()start_list = list(start_time)end_list = list(end_time)start_tem = ''.join(start_list[:2] + [':'] + start_list[2:])end_tem = ''.join(end_list[:2] + [':'] + end_list[2:])tomorrow = (date.today() + timedelta(days=1)).strftime("%Y-%m-%d")start = tomorrow + ' ' + start_temend = tomorrow + ' ' + end_tem# print(start_time,end_time,start,end)# 设置开始抢座时间target_ticks = time.mktime(time.strptime(str(today) + ' 22:29:57', '%Y-%m-%d %H:%M:%S'))i = 0while True:ticks = time.time()if int(ticks) >= int(target_ticks):if dev_id + i > 100456281:print('座位已被抢完')breakelif dev_id + i <= 100456281 and dev_id + i != 100456087:yresult = booking(cookies, start, end, start_time, end_time, str(dev_id + i))if yresult == 1:print(str(dev_id + i - 100455856) + '号座位预约成功')breakif yresult == 2:print(str(dev_id + i - 100455856) + '号座位预约失败')i = i + 1continueelse:print('预约开始时间未到')# print(cookies)# wait_times = int(target_ticks) - int(ticks)# print('预约时间未到,请等待', wait_times, '秒')# time.sleep(wait_times)# print(1)if __name__ == '__main__':# 五楼的136号座位为100455856+136,五楼共227个座位dev_id = 100455988# 每次都需要更改# 输入明天学习的开始时间和结束时间  当前时间预约冲突start_time = '0830'end_time = '2130'# 输入账号和密码id = '账户'password = '密码'main(dev_id, start_time, end_time, id, password)

图书馆抢座系统(python) 附源码相关推荐

  1. JAVA计算机毕业设计图书馆预约占座系统(附源码、数据库)

    JAVA计算机毕业设计图书馆预约占座系统(附源码.数据库) 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe ...

  2. Python毕设-【课堂人脸签到系统】附源码课件/Python练手项目/Python毕业设计

    Python毕设-[课堂人脸签到系统]附源码课件/允许白嫖 文章目录 Python毕设-[课堂人脸签到系统]附源码课件/允许白嫖 系统简介 一.本课题拟解决的问题 二.系统技术栈 三.开发工具 四.数 ...

  3. Python毕设-【人脸签到系统】附源码/Python练手项目/Python毕业设计

    本人承诺只做技术分享,永不收费. V----------------->:专栏详情 文章目录 本人承诺只做技术分享,永不收费. V----------------->:专栏详情 一.背景 ...

  4. JAVA计算机毕业设计图书馆借阅系统(附源码、数据库)

    JAVA计算机毕业设计图书馆借阅系统(附源码.数据库) 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(I ...

  5. 视频教程-手把手搭建Java金融借贷系统【附源码】(毕设)-Java

    手把手搭建Java金融借贷系统[附源码](毕设) 南京大学软件工程硕士,全栈开发工程师,全栈讲师. 曾就职于中软国际.擎天科技.华为等公司,擅长Java开发.Web前端.Python爬虫.PHP等领域 ...

  6. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(10)-系统菜单栏[附源码]

    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(10)-系统菜单栏[附源码] 原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后 ...

  7. java计算机毕业设计钢材出入库管理系统(附源码、数据库)

    java计算机毕业设计钢材出入库管理系统(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe ...

  8. java计算机毕业设计BS用户小票系统(附源码、数据库)

    java计算机毕业设计BS用户小票系统(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe( ...

  9. JAVA计算机毕业设计校园订餐系统(附源码、数据库)

    JAVA计算机毕业设计校园订餐系统(附源码.数据库) 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(In ...

  10. JAVA计算机毕业设计喜枫日料店自助点餐系统(附源码、数据库)

    JAVA计算机毕业设计喜枫日料店自助点餐系统(附源码.数据库) 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclis ...

最新文章

  1. VMware排错:Number of virtual devices exceeds the maximum for a given controller
  2. Android模仿京东登录注册,Android:布局实例之模仿京东登录界面
  3. 计算机组成原理——概述2
  4. htc d10w android 7.0,LineageOS 17.1即将发布:基于Android 10,大量老款手机支持
  5. 转移地址在内存中的jmp指令 检测点9.1
  6. (最新合集)计算机网络谢希仁第七版 第三章课后答案
  7. 【LeetCode笔记】79. 单词搜索 剑指 Offer 12 矩阵中的路径(Java、dfs)
  8. leveldb使用指南
  9. 七种寻址方式(寄存器间接寻址方式)
  10. delphi对比易语言_delphi 2007 vs E语言 vs C#运行速度 - Delphi编程
  11. 《学习opencv》笔记——矩阵和图像处理——cvMax,cvMaxS,cvMerge,cvMin and cvMinS
  12. 芯片之战!亚马逊、Google、苹果群起“围攻”英特尔
  13. figma客户端_小白的Figma入门手册
  14. % 取余运算 取模运算
  15. 山西工商学院计算机科学与技术专业怎么样,山西工商学院计算机科学与技术专业2016年在山西理科高考录取最低分数线...
  16. Incapsula CDN 入门指南
  17. 数据分析2——核心思维技巧
  18. DirectX11海洋模拟实践
  19. EXCEL中数字显示为E+18且尾数为0的解决方法
  20. 管理好你的20~30岁

热门文章

  1. android app 用什么语言开发的?
  2. 多益网络社招iq_多益网络2018秋招iq测试题(二)
  3. 获取当前格林威治时间
  4. web项目js调用斑马打印机打印二维码
  5. emmc/ufs, sd
  6. MySql join 详解
  7. SSL 3.0 Poodle漏洞修复方法——转
  8. 编程计算1至50中是7倍数的数值之和
  9. 人民币与美元兑换python_银行汇率兑换(美元兑换人民币python)银行汇率兑换
  10. Android P 网络请求相关总结