python 도서관 연구실 자동 예약 기능 실현

10229 단어 python자동 예약
본 고 는 python 이 도서관 연구실 자동 예약 을 실현 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
간단 한 소개
현재 많은 학교 들 이 학생 들 에 게 매우 좋 은 학습 환경 을 제공 하 는데 보통 자습 교실 의 시설 설비 에 나타난다.이에 대해 한 마디 하지 않 을 수 없 는 것 은 바로 우리 학교의 도서관 이다.새 도서관 이 건설 되면 서 관내 에 도 여러 개의 기능 구역 이 설치 되 었 다.각 층 은 A,B,C,D 네 개의 구역 으로 나 뉘 어 남북 복도 로 연결 되 고 중간 은 회전 계단 으로 1 층 에서 5 층 으로 관통 된다.A 구역 은 자습 구역 이다.B 구 와 C 구 는 장 열 을 하나 로 합 친 사회과학 과 자연과 학 서고 이다.D 구역 은 전문 기능 구역 으로 영상 실,디지털 미디어 창작 자 체험 센터,스마트 교육 교실,클 라 우 드 데스크 톱 전자 열람실 등 을 포함한다.B.C 구역 동서 연 랑 에는 크기 가 12 개의 연구실 이 설치 되 어 있다.남북 연 랑 에는 레저 독서 구역 이 설치 되 어 있다.
위 에 있 는 부분 은 도서관 홈 페이지 에서 베 낀 것 이지 만 정말 학교의 도서관 에 칭찬 을 해 야 한다.이 글 의 본론 으로 돌아 가 학 교 는 많은 교사 와 학생 들 에 게 편안 하고 우수한 설비 가 완 비 된 연구실 을 무료 로 제공 했다.하지만 이들 연구실 은 온라인 예약 을 해 야 들 어 갈 수 있 고,매일 00:00 에 다음 날 예약 이 열 리 기 때문에 한 시간 대(3 시간)정도 의 연구실 로 가 려 면 그야말로'등불 켜 기 야전'이다.물론 이 과정 에서 손 속도 가 빠 르 면 큰 장점 이 있 을 것 이다.저녁 에 일찍 쉬 고 손 이 빠 르 지 않 으 면 연구실 에 예약 할 생각 은 하지 마 세 요.마침 최근 에 python 파충 류 를 조금 배 웠 는데 파충류 로 이 어 려 운 임 무 를 완수 해 주 려 고 합 니 다.하하하하!(ps:악성 접근 방지,모든 링크 를 놓 지 않 습 니 다)
python 실현 사고
생각 하 는 것 은 매우 간단 하 다.단지 계 정 에 로그 인하 고 방 을 찾 으 며 예약 을 제출 하 는 것 이다.그럼 한번 해 보 자.
로그 인 계 정
먼저 저희 연구실 에서 예약 한 로그 인 화면 을 엽 니 다.링크 는 U2FsdGVkX19NdfJkghN54Msvy1zl7AucRur/ct0nz4orPI7uLkSDsvuFMgr0fGCO 입 니 다.
rn9Z/f8h3bds9w==

좋 습 니 다.이 첫 번 째 로그 인 계 정 은 초보 자 라 는 것 을 시험 해 보 았 습 니 다.하지만 겁 먹 으 면 안 됩 니 다.다른 사내 들 이 사용 하 는 방법 을 참고 하면 fireforx 의 firebug(ctrl+shift+e)를 열 어 네트워크 상황 을 보고 이 상황 에서 정상 적 인 로그 인 을 하 는 것 입 니 다.

여기에 post 가 있 는 것 을 볼 수 있 습 니 다.그 때 는 python 에서 requests.post 방법 을 사용 할 수 있 습 니 다.

성공 적 인 로그 인 을 위해 서 는 파충류 의 신분 을 숨 겨 야 합 니 다.메시지 헤더 에서 우리 의 요청 머리 를 볼 수 있 습 니 다.인 자 를 모두 복사 하면 자신의 headers={...}를 구성 하여 서버 를 속 일 수 있 습 니 다.

매개 변수 이 페이지 를 보 세 요.이곳 의 폼 데 이 터 는 세 개 밖 에 없 는데 각각 인증 코드,계 정과 비밀번호 에 대응 합 니 다.이 매개 변 수 를 복사 하면 우리 의 data={...}을 구성 할 수 있 습 니 다.그 중에서 우리 가 주의해 야 할 것 은 바로 이 인증 코드 이다.인공 적 으로'자체'로 식별 할 수 있 든 기계 가 자동 으로 식별 할 수 있 든 모두 인증 코드 를 로 컬 파일 로 저장 해 야 한다.이렇게 되면 서버 에 한 번 방문 할 때마다 인증 코드 가 바 뀌 는 문제 가 생 겼 다.이제 생각 을 잘 살 펴 보 겠 습 니 다.먼저 인증 코드 를 받 아 로 컬 에 저장 해 야 합 니 다.서버 에 한 번 방문 해 야 합 니 다.마지막 으로 저 희 는 인 자 를 제출 하여 로그 인 해 야 합 니 다.이것 은 다시 서버 에 방 문 했 습 니 다.이번 인증 코드 는 저희 가 얻 은 인증 코드 와 같은 인증 코드 가 아 닙 니 다.방금 시 작 된 시도 에서 나 는 서버 에 로그 인 할 수 없 었 다.바로 두 번 의 인증 코드 가 일치 하지 않 았 다.어떻게 처음 얻 은 인증 코드 와 제출 할 때의 인증 코드 가 일치 합 니까?
여기에 같은 쿠키 가 필요 합 니 다.위의 몇 개의 그림 에서 우 리 는 모두 쿠키 값 을 볼 수 있 습 니 다.동기 화 를 확보 하려 면 인증 코드 를 가 져 올 때의 쿠키 값 과 계 정 비밀 번 호 를 제출 할 때의 쿠키 값 이 일치 해 야 합 니 다.따라서 제 프로그램 에서 제 가 먼저 한 단계 에서 쿠키 값 을 가 져 온 다음 에 이 쿠키 값 을 headers 의 매개 변수 로 합 니 다.로그 인 의 사 고 는 바로 이 렇 습 니 다.한 마디 보충 하 겠 습 니 다.여기 의 인증 코드 는 제 가 수 동 으로 식별 한>n<입 니 다.
방 찾기
이 절 차 는 사실 쓸모없는 절차 입 니 다.왜 이런 절차 가 있 습 니까?인위적인 예약 습관 에 따라 우 리 는 어떤 절 차 를 밟 을 수 있 습 니까?그러나 파충 류 를 사용 하면 로그 인 에 성공 하면 바로 예약 양식 을 제출 할 수 있 습 니 다.물론 자동 예약 프로그램 을 더욱 스마트 하 게 하려 면 이 절 차 를 추가 할 수 있 습 니 다.그 방 들 은 예약 도 할 수 있 고 여기 서 사용자 정의 로 규칙 을 보충 할 수 있 습 니 다.그냥 넘 어 갈 게 요...
예약 제출
로그 인 과 마찬가지 로 우리 도 수 동 으로 한 번 제출 하여 네트워크 상황 을 보면 python 으로 이 과정 을 모 의 할 수 있 습 니 다.여기 서 는 스티커 로 설명 하지 않 겠 습 니 다.여기 서 제출 하 는 것 도 requests.post 의 방법 입 니 다.그러나 주의해 야 할 것 은 이 곳 의 headers 와 로그 인 할 때의 headers 는 다 르 기 때문에 다른 유사 한 예약 프로그램 에서 서로 다른 내용 의 post 의 headers 가 일치 하 는 지 주의 할 수 있 음 을 알려 드 립 니 다.나 여기 잠깐 갇 혔 어.

#!/usr/bin/env python 
# _*_ coding:utf-8 _*_ 
# 
# @Version : 1.0 
# @Time  : 2018/4/10 
# @Author :    
# @File  : reservation_4.py 

import requests
import re
import json
import datetime
import time


def get_cookies():
  """  cookies"""
  url = 'http://**************'
  s = requests.session()
  s.get(url)
  ck_dict = requests.utils.dict_from_cookiejar(s.cookies)   #  jar     dict
  ck = 'JSESSIONID=' + ck_dict['JSESSIONID']         #   cookies

  """     """
  path = './code.png'
  get_cookies_headers = {
    'user-anget': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0',
    'Cookie': ck}
  get_cookies_url = 'http://**************'
  code_image = requests.get(get_cookies_url, headers=get_cookies_headers)
  with open(path, 'wb') as fn:
    fn.write(code_image.content)
    fn.close()
    print('       ')
  return ck


def login(cookies, hour, minute):
  login_headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive',
    'Content-Length': '45',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Cookie': cookies,
    'Host': '**************',
    'Pragma': 'no-cache',
    'Referer': 'http://**************',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0'
  }
  login_url = 'http://**************'
  login_data = {
    'codeImage': input('      :'),
    'uname': '**************',
    'upass': '**************'
  }
  requests.post(login_url, data=login_data, headers=login_headers)

  res = requests.get('http://**************', headers=login_headers)
  reg_h = r'<option value=(.*?)>\d{4}-\d{2}-\d{2}' #         hash
  value_h = re.findall(reg_h, res.text)

  """  """
  counter = 0
  while (True):
    now = datetime.datetime.now() #         
    if now.hour == hour and now.minute == minute:
      break
    time.sleep(0.5)
    # print(now)
    counter = counter + 1
    if counter == 240:
      res = requests.get('http://**************', headers=login_headers)
      reg_h = r'<option value=(.*?)>\d{4}-\d{2}-\d{2}' #         hash
      reg_t = r'(\d{4}-\d{2}-\d{2})' #           
      value_h = re.findall(reg_h, res.text)
      value_t = re.findall(reg_t, res.text)
      with open('./con_log.txt', 'a') as fjs:
        fjs.write(eval(value_h[-1])+' '+value_t[-1]+' '+str(now)+' 
') fjs.close() print(' ') counter = 0 return str(eval(value_h[-1])) def reservation(day_hash, cookies, stime, etime): reservation_data = { '_etime': etime, # 11 , 11*60=660 '_roomid': '1285b3ca77594b3095c7b89d4922553c', # Id '_seatno': '', '_stime': stime, # 8 , 8*60=480 '_subject': ' ', # '_summary': ' ', # 'ruleId': day_hash, 'usercount': 3, # 'users': '**************', # 'UUID': '**************' } reservation_headers = { 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive', 'Content-Length': '239', 'Content-Type': 'application/json', 'Cookie': cookies, 'Host': '**************', 'Pragma': 'no-cache', 'Referer': 'http://**************', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0' } reservation_js = json.dumps(reservation_data) reservation_url = 'http://**************' status = requests.post(reservation_url, data=reservation_js, headers=reservation_headers) # print(stime, etime) # print(status) print(status.text) def main(): """ :11:20-20.40""" full_stime = ['1060', '870', '680'] full_etime = ['1240', '1050', '860'] """ :10:00-13:00;13:50-16:50;17:40-20:40""" stime = ['1060', '830', '600'] etime = ['1240', '1010', '780'] cookies = get_cookies() day_hash = login(cookies, 0, 0) # for i in range(0, 3): reservation(day_hash, cookies, stime[i], etime[i]) if __name__ == '__main__': main()
실현 효과
python 을 배 운 이후로 엄 마 는 더 이상 내 가 연구실 을 빼 앗 지 못 할 까 봐 걱정 하지 않 아 도 된다.프로그램 에 정 해진 절 차 를 몇 줄 추가 하면 00 시 에 자동 으로 연구실 을 예약 해 줄 수 있 습 니 다.테스트 를 통 해 예약 할 때 어느 정도 방 을 예약 할 수 있 는 것 으로 나 타 났 다.예 를 들 어 4-12 일 에 세 시간 대 를 약속 하 는 데 7 초 걸 렸 지만 4-13 일 에 21 초 를 썼 고 한 시간 대 를 다른 친구 들 에 게 약속 을 받 았 다.물론 이 절 차 는 좀 더 개선 하여 완승'손 속도'를 실현 해 야 한다.

마지막 에 보충 하 다
아직 부족 합 니 다.교 류 를 환영 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기