精华内容
下载资源
问答
  • 南京工程学院我去图书馆占座抢座 中签绝缘体!! 恢复个人娱乐和学习交流 大佬两年前就有反馈问题,至今仍未解决 本人非计算机相关专业,代码写的烂,变量起名不规范等别说嗷,只是积极使用python解决生活中所遇到的...
  • 将“ezp.lib.unimelb.edu.au”添加到浏览器的地址,让您快速访问数据库 这个扩展允许你以非常快的速度访问墨尔本大学带来的数据库。是为了个人使用而做的。 支持语言:English
  • 我去图书馆-抢座助手

    万次阅读 多人点赞 2018-04-09 19:28:37
    某天觉得这个 ’我去图书馆 ’ 图书馆定座系统体验很不好,抓包简单分析发现它的数据传输没有加密,于是尝试用py模拟手动抢座 正文 就是个简单的 python借用requests模块,设置好headers、cookies,直接get就可以...

    2019.07.22 文章已更新:

    [igtl-again] 我去图书馆-抢座主逻辑详解-https://blog.csdn.net/RenjiaLu9527/article/details/96843605

    写在前面

    github项目地址

    某天觉得这个 ’ 我去图书馆 ’ 图书馆定座系统体验很不好,抓包简单分析发现它的数据传输没有加密,于是尝试用py模拟手动抢座

    正文##

    就是个简单的 python借用requests模块,设置好headers、cookies,直接get就可以了。主要的py文件如下

    RSmain.py

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    #@filename:RSmain.py
    #@user: wheee/RenjiaLu
    #@time:20180408
    #@illustration:  reserve a seat 
    
    import ConfigParser
    import json
    import time
    import random
    import os,sys
    import requests
    from datetime import date, datetime
    reload(sys) 
    sys.setdefaultencoding('utf-8')
    
    
    
    #配置信息
    # anum = int(time.mktime(time.strptime("2018-04-07 23:09:30", "%Y-%m-%d %H:%M:%S")  ))
    # ymd_hms = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(1523113200))
    
    FLG_AGAIN = "AGAIN"
    FLG_NEXTSEAT = "NEXTSEAT"
    CONFIG_NAME = "RSconf.ini"
    #section标签为:[openIdConf_2018-04-08]
    
    RUNTIME =  int(time.mktime(time.strptime(time.strftime('%Y-%m-%d',time.localtime(time.time())) \
    			+" 20:00:00", "%Y-%m-%d %H:%M:%S")  ))   #"2018-03-05 11:39:19" 
    READYTIME = RUNTIME - 30 #提前 0.5 分钟准备
    delayTime = 10
    
    mheaders =  {
    'Host':	'wechat.v2.traceint.com',
    'User-Agent':	'Mozilla/5.0 (Linux; Android 7.0; MI 5 Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/043909 Mobile Safari/537.36 MicroMessenger/6.6.5.1280(0x26060536) NetType/WIFI Language/zh_CN',
    'Accept':	'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,image/wxpic,image/sharpp,image/apng,*/*;q=0.8',
    'Accept-Encoding':	'gzip, deflate',
    'Accept-Language':	'zh-CN,en-US;q=0.8'
    }
    mcookies = dict(FROM_TYPE="weixin" ,wechatSESS_ID="your_sessionid",
    	Hm_lvt_7ecd21a13263a714793f376c18038a87="1521332626,1521734275",
    	Hm_lpvt_7ecd21a13263a714793f376c18038a87=str(int(time.time())))
    
    #=========
    	
    #类
    class GlobalValue :
    
    	#[座位标号:坐标],不同学校的座位表不同
    	R1_SEATTABLE={
    	#第一自习室座位编码 		252 个
    	 '1':'39,20','10':'37,23','100':'7,21','101':'8,21','102':'10,21','103':'10,20','104':'8,20','105':'7,20','106':'5,20','107':'7,13','108':'8,12','109':'9,11','11':'36,23','110':'10,10','111':'11,9','112':'16,6','113':'16,8','114':'16,9','115':'16,11','116':'16,12','117':'16,14','118':'17,14','119':'17,12','12':'34,23','120':'17,11','121':'17,9','122':'17,8','123':'17,6','124':'19,6','125':'19,8','126':'19,9','127':'19,11','128':'19,12','129':'19,14','13':'34,24','130':'20,14','131':'20,12','132':'20,11','133':'20,9','134':'20,8','135':'20,6','136':'22,6','137':'22,8','138':'22,9','139':'22,11','14':'36,24','140':'22,12','141':'22,14','142':'23,14','143':'23,12','144':'23,11','145':'23,9','146':'23,8','147':'23,6','148':'25,6','149':'25,8','15':'37,24','150':'25,9','151':'25,11','152':'25,12','153':'25,14','154':'26,14','155':'26,12','156':'26,11','157':'26,9','158':'26,8','16':'39,24','160':'31,20','161':'29,20','162':'28,20','163':'26,20','164':'25,20','165':'23,20','166':'22,20','167':'20,20','168':'17,20','169':'15,20','17':'39,26','170':'14,20','171':'12,20','172':'12,21','173':'14,21','174':'15,21','175':'17,21','176':'20,21','177':'22,21','178':'23,21','179':'25,21','18':'37,26','180':'26,21','181':'28,21','182':'29,21','183':'31,21','184':'31,23','185':'29,23','186':'28,23','187':'26,23','188':'25,23','189':'23,23','19':'36,26','190':'22,23','191':'20,23','192':'17,23','193':'15,23','194':'14,23','195':'12,23','196':'12,24','197':'14,24','198':'15,24','199':'17,24','2':'37,20','20':'34,26','200':'20,24','201':'22,24','202':'23,24','203':'25,24','204':'26,24','205':'28,24','206':'29,24','207':'31,24','208':'31,26','209':'29,26','21':'34,27','210':'28,26','211':'26,26','212':'25,26','213':'23,26','214':'22,26','215':'20,26','216':'17,26','217':'15,26','218':'14,26','219':'12,26','22':'36,27','220':'12,27','221':'14,27','222':'15,27','223':'17,27','224':'20,27','225':'22,27','226':'23,27','227':'25,27','228':'26,27','229':'28,27','23':'37,27','230':'29,27','231':'31,27','232':'31,29','233':'29,29','234':'28,29','235':'26,29','236':'25,29','237':'23,29','238':'22,29','239':'20,29','24':'39,27','240':'17,29','241':'15,29','242':'14,29','243':'12,29','244':'14,30','245':'15,30','246':'17,30','247':'20,30','248':'22,30','249':'23,30','25':'39,29','250':'25,30','251':'26,30','252':'28,30','253':'29,30','26':'37,29','27':'36,29','28':'34,29','29':'34,30','3':'36,20','30':'36,30','31':'37,30','32':'39,30','33':'37,37','34':'36,38','35':'35,39','36':'34,40','37':'33,41','38':'26,44','39':'26,42','4':'34,20','40':'26,41','41':'26,39','42':'25,39','43':'25,41','44':'25,42','45':'25,44','46':'23,44','47':'23,42','48':'23,41','49':'23,39','5':'34,21','50':'22,39','51':'22,41','52':'22,42','53':'22,44','54':'20,44','55':'20,42','56':'20,41','57':'20,39','58':'19,39','59':'19,41','6':'36,21','60':'19,42','61':'19,44','62':'17,44','63':'17,42','64':'17,41','65':'17,39','66':'16,39','67':'16,41','68':'16,42','69':'16,44','7':'37,21','70':'11,41','71':'10,40','72':'9,39','73':'8,38','74':'7,37','75':'5,30','76':'7,30','77':'8,30','78':'10,30','79':'10,29','8':'39,21','80':'8,29','81':'7,29','82':'5,29','83':'5,27','84':'7,27','85':'8,27','86':'10,27','87':'10,26','88':'8,26','89':'7,26','9':'39,23','90':'5,26','91':'5,24','92':'7,24','93':'8,24','94':'10,24','95':'10,23','96':'8,23','97':'7,23','98':'5,23','99':'5,21'
    	}
    	R2_SEATTABLE={
    		#第二自习室座位编码		203  个 
    		'1':'33,24','10':'29,25','100':'9,30','101':'9,31','102':'7,24','103':'7,25','104':'7,26','105':'7,27','106':'7,28','107':'7,29','108':'7,30','109':'7,31','11':'29,26','110':'4,28','111':'3,28','112':'3,26','113':'4,26','114':'4,24','115':'3,24','116':'3,22','117':'4,22','118':'4,20','119':'3,20','12':'29,27','120':'3,18','121':'4,18','122':'7,20','123':'7,19','124':'7,18','125':'7,17','126':'7,16','127':'7,15','128':'9,15','129':'9,16','13':'29,28','130':'9,17','131':'9,18','132':'9,19','133':'9,20','134':'11,20','135':'11,19','136':'11,18','137':'11,17','138':'11,16','139':'11,15','14':'29,29','140':'13,15','141':'13,16','142':'13,17','143':'13,18','144':'13,19','145':'13,20','146':'19,20','147':'19,19','148':'19,18','149':'19,17','15':'29,30','150':'19,16','151':'19,15','152':'19,14','153':'19,13','154':'19,12','155':'19,11','156':'21,11','157':'21,12','158':'21,13','159':'21,14','16':'29,31','160':'21,15','161':'21,16','162':'21,17','163':'21,18','164':'21,19','165':'21,20','166':'23,20','167':'23,19','168':'23,18','169':'23,17','17':'29,32','170':'23,16','171':'23,15','172':'23,14','173':'23,13','174':'23,12','175':'23,11','176':'25,11','177':'25,12','178':'25,13','179':'25,14','18':'29,33','180':'25,15','181':'25,16','182':'25,17','183':'25,18','184':'25,19','185':'25,20','186':'27,20','187':'27,19','188':'27,18','189':'27,17','19':'27,33','190':'27,16','191':'27,15','192':'29,15','193':'29,16','194':'29,17','195':'29,18','196':'29,19','197':'29,20','198':'31,20','199':'31,19','2':'33,25','20':'27,32','200':'33,19','201':'33,20','202':'21,24','203':'19,24','21':'27,31','22':'27,30','23':'27,29','24':'27,28','25':'27,27','26':'27,26','27':'27,25','28':'27,24','29':'25,24','3':'33,28','30':'25,25','31':'25,26','32':'25,27','33':'25,28','34':'25,29','35':'25,30','36':'25,31','37':'25,32','38':'25,34','39':'25,35','4':'33,29','40':'23,35','41':'23,34','42':'23,33','43':'23,32','44':'23,31','45':'23,30','46':'23,29','47':'23,28','48':'23,27','49':'23,26','5':'31,29','50':'23,25','51':'23,24','52':'21,25','53':'21,26','54':'21,27','55':'21,28','56':'21,29','57':'21,30','58':'21,31','59':'21,32','6':'31,28','60':'21,33','61':'21,34','62':'21,35','63':'19,35','64':'19,34','65':'19,33','66':'19,32','67':'19,31','68':'19,30','69':'19,29','7':'31,25','70':'19,28','71':'19,27','72':'19,26','73':'19,25','74':'13,24','75':'13,25','76':'13,26','77':'13,27','78':'13,28','79':'13,29','8':'31,24','80':'13,30','81':'13,31','82':'13,32','83':'13,33','84':'11,33','85':'11,32','86':'11,31','87':'11,30','88':'11,29','89':'11,28','9':'29,24','90':'11,27','91':'11,26','92':'11,25','93':'11,24','94':'9,24','95':'9,25','96':'9,26','97':'9,27','98':'9,28','99':'9,29'
    	}
    	#[自习室编号:服务器代号]
    	DICT_ROOM_KV={"ROOM_1":"323","ROOM_2":"324"}
    
    	def __init__(self):
    		pass
    
    
    #订座函数
    def reserveSeatFunc(mheaders,mcookies,roomId,seatId):
    
    	gv = GlobalValue()
    	roomValue = gv.DICT_ROOM_KV["ROOM_1" if roomId == "1" else "ROOM_2" ]
    	seatValue = (gv.R1_SEATTABLE if roomId == "1" else gv.R1_SEATTABLE)[seatId]
    
    	url_zuowei ="http://wechat.v2.traceint.com/index.php/reserve/index.html?f=wechat"
    	url_dixzixishi = "http://wechat.v2.traceint.com/index.php/reserve/layout/libid=%s.html&1523076408"%(roomValue)
    	url_querenxuanzuo = "http://wechat.v2.traceint.com/index.php/reserve/get/libid=%s&key=%s&yzm="%(roomValue,seatValue)
    	url_mingriyuyue_dixzixishi = "http://wechat.v2.traceint.com/index.php/reserve/layoutApi/action=prereserve_event&libid=%s"%(roomValue)
    	url_mingriyuyue_querenxuanzuo = "http://wechat.v2.traceint.com/index.php/prereserve/save/libid=%s&key=%s&yzm="%(roomValue,seatValue)
    
    	requests.adapters.DEFAULT_RETRIES = 5
    	rs = requests.Session()
    	rs.keep_alive = False
    	#点击【座位】进入首页
    	try:
    		#当日即时预定
    		respone=rs.get(url_zuowei,timeout=1,headers=mheaders,cookies=mcookies)
    		#明日预约
    		#respone=rs.get(url_mingriyuyue_dixzixishi,timeout=1,headers=mheaders,cookies=mcookies)
    	except Exception as e:
    		print(u"[E]: 进入自习室出错 %s"%repr(e))
    		#return ""
    	else:
    		if (respone.status_code == 200 ) and ((respone.text.find("出入口")>0 or (respone.text.find("自习室")))):
    			print(u"[I]: 进入自习室成功-状态码:%5d"% respone.status_code+"\n")
    		else:
    			print(u"[I]: 进入自习室失败-状态码:%5d"% respone.status_code+"\n")
    	#print(respone.content)
    
    	#选择自习室
    	
    	#点击【确认选座】确认选座
    	try:
    		#当日即时预定
    		respone=rs.get(url_querenxuanzuo,timeout=1,headers=mheaders,cookies=mcookies)
    		#明日预约
    		#respone=rs.get(url_mingriyuyue_querenxuanzuo,timeout=1,headers=mheaders,cookies=mcookies)
    	except Exception as e:
    		print(u"[E]: 确认选座出错 %s"%repr(e))
    	else:
    		#是预定成功 而不是 预订成功
    		if (respone.status_code == 200) and ((respone.text.find("预定成功") > 0) or (respone.text.find("预定座位成功")>0)) :
    			print(u"[I]: 第 %s 自习室 %s 号位置抢座成功!-状态码:%5d"% (roomId,seatId,respone.status_code)+"\n")
    		else:
    			if respone.text.find(u"已经预定") > 0:
    				print(u"[I]: 第 %s 自习室 %s 号位置抢座失败!你已经预定了其他座位!-状态码:%5d"% (roomId,seatId,respone.status_code)+"\n")
    			elif respone.text.find("被人预定") > 0:
    				print(u"[I]: 第 %s 自习室 %s 号位置抢座失败!该座位已经被人预定了!-状态码:%5d"% (roomId,seatId,respone.status_code)+"\n")
    			else:
    				print(u"[I]: 第 %s 自习室 %s 号位置抢座失败!未知原因-状态码:%5d"% (roomId,seatId,respone.status_code)+"\n")
    				print(respone.text)
    				print(respone.url)
    			return FLG_NEXTSEAT #继续抢下一个座位
    	return ""
    
    #判断当前时间处于的阶段 READY/RUN ,修改delay时长
    def howAboutNow():
    	global delayTime,RUNTIME,READYTIME
    	ticks = int(time.time())
    	
    	if ticks >= RUNTIME :
    		return "T_RUN"
    	elif ticks >= READYTIME :
    		delayTime = 0.2 if RUNTIME - ticks < 15  else  8
    		return "T_READY"
    	else :
    		howlong = RUNTIME - ticks
    		if howlong < 7200 :
    			delayTime = 0.2 if howlong < 15  else ( 10 if howlong < 300  else ( 200 if howlong < 3600 else 2400))
    		else :
    			delayTime = 7200 if howlong > 10800 else 4800
    
    		print(u"[I]: 当前时间 %s ,  %s 分钟后进入准备阶段"%\
    			(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(ticks)),str((READYTIME-ticks)/60)))
    		return ""
    #开始
    if __name__ == '__main__':
    	
    	print(u"[I]: 图书馆抢座助手已启动...\n")
    	todaySection = "openIdConf_%s"%time.strftime('%Y-%m-%d',time.localtime(time.time()))
    
    	dict_openID_SESSID = {}
    	isFirstReady = 1 # 1 是第一次准备,2 不是第一次则不再准备
    	while True :
    
    		nowflg = howAboutNow() 
    		if "T_READY" == nowflg:
    			if isFirstReady != 1 :
    				continue
    			print(u"[I]: 开始准备")
    			try:
    				#准备时间-读取配置文件
    				conf = ConfigParser.ConfigParser()
    				conf.read(CONFIG_NAME)       # 文件路径
    				list_tmp = conf.items(todaySection)# 返回openId_wechatSESS_ID标签项下面的键值对 list
    				dict_openID_SESSID = dict(list_tmp)#openid = qlsqge7nr1m92npjcngukeghf5 , 1,23,2,188,1,187
    
    				isFirstReady = 2 #不再是第一次准备
    			except Exception as e:
    				print(u"[E]: 读取配置文件出错 %s"%repr(e))
    
    		#到达预定时间-开始抢座
    		elif "T_RUN" == nowflg :
    			print(u"[I]: 开始抢座 ")
    			for v in dict_openID_SESSID.values():
    				try:
    					listv = v.split(",")
    					mylen = len(listv)
    					mcookies["wechatSESS_ID"] = listv[0].strip()
    
    					returnValue = FLG_NEXTSEAT
    					key_i = 1
    					value_i = key_i + 1
    					#限制每个人备选抢座号的数量 2个
    					mylen = 5 if mylen >= 5 else mylen
    					while value_i < mylen and returnValue == FLG_NEXTSEAT:
    						t_roomid = listv[key_i].strip()
    						t_seatid = listv[value_i].strip()
    						key_i = key_i + 2
    						value_i = key_i + 1
    
    						#抢座!!!
    						returnValue = reserveSeatFunc(mheaders,mcookies,t_roomid,t_seatid)
    
    				except Exception as e:
    					print(u"[E]: 抢座出错 %s"%repr(e))
    			#只运行一次 抢座模块 
    			break
    
    		else :
    			print(u"[I]: %s 秒后继续监听..."%delayTime)
    			time.sleep(delayTime)
    

    然后我将其上传服务器接到一个公众号的后台,测试可行。详情可扫
    这里写图片描述
    [为了学习]


    结束,有什么想说的请留言

    展开全文
  • [igtl-again]我去图书馆-抢座主逻辑详解

    万次阅读 多人点赞 2019-07-22 17:13:42
    我去图书馆】、【来选座】这类公众号借助微信的平台提供预约座位的服务,本意是方便大家。 通过简单抓包分析发现 但是验证措施太过直接,导致的结果就是抢座不公平,总有人“闷声发大财”;所以有了此文

    20190722:第一次编写


    写在前面

    【我去图书馆】、【来选座】这类公众号借助微信的平台提供预约座位的服务,本意是方便大家

    但是防护验证措施比较弱

    由此带来的结果就是总是有人在“闷声发大财”偷偷使用程序抢座,这明显的不公平

    以现在的防护验证强度推测,自习室座位越紧张的学校,使用外挂抢座的越多;

    只是没有人公开源码


    抢座主逻辑详解

    1. 流程

    1,抓包,获取通信交互数据
    2,分析参数,尝试离线构造参数
    3,py模拟提交测试

    2. 关键函数

    function: reserve_a_seat

    # reserve a seat
    @utils.catch_exception
    def reserve_a_seat(self, libid='', coordinate='', pre_or_today=pre):
       key_seat_page = pre_seatmap_page
       verify_key = verify_key
       url_prefix = url_prefix_pre
       seatmap_pageurl = seatmap_pageurl_pre
       seatmap_page_html = utils.get_response(
           url=seatmap_pageurl, sess=self.sess,
           m_headers=self.CF.M_HEADERS_PRE_RESERVE, m_cookies=self.CF.M_COOKIES, verify_key=verify_key)
       if not seatmap_page_html:
           return False
       soup = BeautifulSoup(seatmap_page_html, 'html.parser')
       hexch_js_code = requests.get([e for e in soup.find_all('script') if
              str(e).find(cache_layout_url) >= 0][0]['src'], verify=False)
       hexch_js_code.encoding='utf8'
       ajax_url = re.compile(r'(?<=[A-Z]\.ajax_get\().*?(?=,)').search(hexch_js_code.text).group(0).replace('AJAX_URL', url_prefix)
       hexch_js_code = re.sub(r'[A-Z]\.ajax_get', 'return %s ; T.ajax_get' % ajax_url, hexch_js_code.text)
       http_hexch_seatinfo = execjs.compile(hexch_js_code).call('reserve_seat', str(libid), coordinate)
       response = self.sess.get(http_hexch_seatinfo, proxies=utils.get_proxy(), headers=self.CF.M_HEADERS_PRE_RESERVE, cookies=self.CF.M_COOKIES, verify=False)
       # return 
       return verify_response(response.text)
    

    步骤流程图
    在这里插入图片描述

    3. 参数获取

    上述流程的关键就是如何解析得到 hex_code
    在这里插入图片描述

    //抢座 url
    https://wechat.v2.traceint.com/index.php/prereserve/save/libid=1234&sESx8nLBnQHh=128,63&yzm=	
    

    这是一段加密的 hex_code,这应该是为了修复的上一个版本的爬虫漏洞,而新加的验证字段,每次请求都会变;

    但是仔细分析【我去图书馆】首页的 html,可以发现有三个 <script,其中的一个url便是生成 hex_code的 js 文件的 url;
    在这里插入图片描述
    打开这个url,可以清晰的看到这个顾名思义的函数:

    reserve_seat
    在这里插入图片描述
    所以只要每次去获取这段加密 js 代码,直接使用python-execjs模块执行js即可得到hex_code

    然后提交get请求即可抢座。

    到这里我就有了点疑问:

    为何添加了hex_code字段,却又把生成这个字段的函数reserve_seat()简单直白清晰的放在旁边?

    希望 【我去图书馆】后台验证不要这么直接,能稍微完善一点;屏蔽掉外挂,让大家公平的抢座!

    为了学习!


    最后

    文章发布即向我去图书馆的官方分享文章链接进行反馈

    工程部署到了微信 《为了学习》公众号,仅供体验测试,学习交流,服务启动中…
    在这里插入图片描述

    还有什么想说的请留言


    参考链接

    展开全文
  • 我去图书馆”抢座脚本

    千次阅读 2021-07-15 16:30:13
    我做了个服务器代理可以抢我去图书馆的座位, 有兴趣的加我QQ交流下吧:1395647697

    我做了个服务器代理可以抢我去图书馆的座位,

    有兴趣的加我QQ交流下吧:1395647697

    展开全文
  • 我去图书馆 抢座分析

    千次阅读 2020-09-09 14:42:50
    首先我去图书馆 使用了微信绑定账号,因此平常的账号登录几乎没用。 通过抓包分析,用户需要上传SERVERIDwechatSESS_ID 这两个参数才能进行抢座,并且这两个参数会变动,在抢座前一个小时内最好更新参数。难度+1 ...

    参考 https://blog.csdn.net/RenjiaLu9527/article/details/96843605

    大致分析了一下抢座流程:

    首先我去图书馆 使用了微信绑定账号,因此平常的账号登录几乎没用。

    通过抓包分析,用户需要上传SERVERID  wechatSESS_ID 这两个参数才能进行抢座,并且这两个参数会变动,在抢座前一个小时内最好更新参数。难度+1

    查看自习室列表

    选择自习室

    再进行抢座

    最后提交座位进行选座。

    选择座位使用Get 需将自己wechatSESS_ID  SERVERID放进Cookie中

    Get中包含自习室id 座位信息 还有一个随机参数,如果没此参数则显示该座位不存在,难度+1

    此随机参数动态变化,经过一个名称内容动态变化的js提供,并且js内容进行混淆提高分析难度

    提供获取该随机参数的思路,获取js文件,分析其随机参数所在位置,获取其参数。

    改写后确实可以获取其随机参数

    这样座位就抢到了,(●ˇ∀ˇ●)。。

    这还不一定,在分析网页结构发现了,

    目前抢的时候还没有出现验证码,这个就要靠打码平台或自己深度学习训练验证码,难度+1

    最后总结:抢座难度较高,代价大,所以大家老老实实手动抢座

    展开全文
  • 我去图书馆”公众号代码抢座的实现

    千次阅读 热门讨论 2020-09-30 20:50:09
    因为要考研嘛,想去图书馆。...“我去图书馆”公众号实现抢座功能,肯定是通过与服务器进行交互完成的。通过抓包可以发现,最终完成抢座这一步的,是一个get请求,那么我们通过模拟手机来向服务器发送这样一个get
  • 图书馆助手-crx插件

    2021-04-03 19:42:58
    图书馆助手,支持豆瓣、当当、亚马逊、京东图书与图书馆资源的关联。 在豆瓣、京东、亚马逊、当当图书页显示您所在学校的图书馆馆藏。*********************已经快2年没更新了,这段时间一直收到同学们鼓励的邮件,...
  • go:去图书馆-源码

    2021-03-31 22:12:24
    去图书馆提高生产力 ./common http : log : wecom : ssh : kafka : es : encrypt : encoding : k8s : mysql : mongodb : redis : string : pinger : cert :
  • 图书馆助手

    2016-06-22 10:08:10
    自己写的android小软件,欢迎大家下载
  • 图书馆自动预约(1)--验证码处理

    千次阅读 2020-08-25 13:27:34
    序章 这个故事是这样开始的,学校为了防控,图书馆需要预约,然后一次400个人…基本瞬间没了…,大家都在拼命刷手机,企图抢先一步… 每天7点开放预约,还要早起…真的累… 所以想偷懒,就开始研究能不能设计一个自动...
  • 图书馆预约抢座系统(一)

    千次阅读 2021-03-31 10:53:25
    上周因为某些特殊的原因(实验室过于吵 ),想到了一段时间图书馆学习,图书馆自习是需要预约的。先简单交代下图书馆预约的情况,图书馆预约系统从早上7点-晚上11点开放,可以预约今天和明天的座位,也就是...
  • 爬虫——图书馆抢座

    千次阅读 多人点赞 2020-10-25 15:43:10
    文章目录python爬虫 -----图书馆抢座验证码识别分析登录请求信息用户登录获取请求信息尤其是cookie通过cookie获取验证码分析抢座请求信息利用保存的cookie会话发送post 以及get请求抢座成功结果图利用多线程并发给多...
  • urllib,httplib也尝试了,但总感觉有一些吃力,最后选择了requests,requests真的超级强大 安装requests pip install requests 分析网站http请求 一次最基本的预约请求流程 访问网站主页面----获得一个phpsessid ...
  • selenium webdriver python 自动图书馆预约抢座
  • 近期为了疫情防控,所以学校图书馆新搭建了个预约平台 点击登录,默认密码000,这个正常,很多新系统都这样 登录,进入的中心看看都可以进行哪些骚操作 的资料和修改密码 emm,修改密码比较有意思,我们看看有什么...
  • python爬虫——爬取图书馆借阅数据

    千次阅读 2019-01-17 23:19:03
     由于图书管理系统很多人密码都未改,为默认密码,刚好最近在学爬虫,想爬出来试试手,并没有任何恶意,侵删。  本次主要包含以下内容:  模拟用户登录的程序  BeautifulSoup文档学习内容  爬取html文件的...
  • go_lib 的Go图书馆
  • 微信小程序-----图书馆座位预约(一)

    万次阅读 多人点赞 2020-03-25 00:37:18
    签到问题------------想法:在图书馆设置一个二维码扫描仪,选座成功后会生成一个二维码,持手机到图书馆扫描仪前扫描进行签到(这个因为放暑假,大创的钱拿不到,所以只是想法,不过觉得可行) 三。准备 1.界面样式...
  • 高校图书馆网站-源码

    2021-02-13 21:07:12
    高校图书馆网站 您是否曾经紧张过从大学图书馆发行的那本书? 您要保留所有带有作者姓名的书籍的记录吗? 所以,你! 使用该大学图书馆网站,您可以记录所有大学书籍和资料 :star-struck: 。 兴奋的? 贡献很...
  • 科技改变了你的生活,让我们的生活更加便利和高效。目前,智慧校园成为各方关注对象,科技的春风...去图书馆自习需要提前预约座位,去体育馆锻炼需要提前预约位置,甚至你想上哪个老师的课还需要提前预约抢课,预...
  • 微信图书馆查书助手java版项目源码。使用java语言 + EasyWechat框架 开发。 详情见的博客:http://blog.csdn.net/u010182075/article/details/38906745
  • 这是和为的要求条形码的计算机科学老师设计的图书馆 我们班的图书馆是9年级完成项目。 这个库是存在的 便于学生在屏幕上显示条形码。 api很简单,并且使用python-barcode库提供PIL图像。 安装 Windows和UNIX...
  • 图书馆-一个基于以太坊和星际文件系统的中心化的图书馆 提醒因为ipfs公共网关变量,图书封面很大可能不能显示。 1总览 本图书借阅平台可以实现中心化的,分散的,可溯源的图书借阅功能。 用户发布图书 借书 还书...
  • 360个人图书馆的禁止复制着实烦人,在百度的搜索排名又高经常会搜索出其内容,不得已之下写个Chrome浏览器插件解决这个问题,下载地址: https://download.csdn.net/download/ioriliao/13965600 完整的代码: ...
  • python爬虫爬取学校图书馆网书名

    千次阅读 2019-10-30 17:36:24
    python爬虫一步步实现爬取图书馆网图书借阅信息
  • 顺序表和链表实现图书管理系统

    万次阅读 多人点赞 2019-10-10 08:25:39
    图书信息表包括如下常用的基本操作:图书信息表的创建和输出、排序(分别按图书名称、按图书价格排序)、修改、按名查找、最贵图书的查找、新书入库、旧书出库等八项。 其中,图书信息包括如下6部分: ISBN、作者...
  • 震惊!学校图书馆刷脸系统出现故障! 2019年春,大学学子结束了寒假,纷纷回归了校园...同学C:那是个阳光明媚的下午,成功一次性刷脸进了图书馆,眼角余光瞥到刷脸系统的显示器上竟然不是自己的名字,是一个陌...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,213
精华内容 17,285
关键字:

我去图书馆