规范化 URL,登录页返回 404 时自动尝试 /jwglxt/。
改用当前有效的 DgXscj 成绩接口。 同步更新配置说明。
This commit is contained in:
@@ -20,7 +20,8 @@ def get_grade(student_client, output_type="none"):
|
||||
while attempts > 0:
|
||||
|
||||
# 调用student_client的get_grade方法获取成绩信息
|
||||
grade_data = student_client.get_grade().get("data", {})
|
||||
# 学生成绩查询目前使用 cjcx_cxDgXscj 接口
|
||||
grade_data = student_client.get_grade(use_personal_info=True).get("data", {})
|
||||
grade = grade_data.get("courses", [])
|
||||
|
||||
# 如果grade不为空,跳出循环
|
||||
|
||||
+14
-6
@@ -5,7 +5,7 @@ import re
|
||||
import time
|
||||
import traceback
|
||||
import unicodedata
|
||||
from urllib.parse import urljoin
|
||||
from urllib.parse import urljoin, urlparse
|
||||
import requests
|
||||
import rsa
|
||||
from pyquery import PyQuery as pq
|
||||
@@ -34,7 +34,6 @@ class Client:
|
||||
|
||||
def __init__(self, cookies={}, **kwargs):
|
||||
# 基础配置
|
||||
self.base_url = kwargs.get("base_url")
|
||||
self.raspisanie = kwargs.get("raspisanie", RASPIANIE)
|
||||
self.ignore_type = kwargs.get("ignore_type", [])
|
||||
self.detail_category_type = kwargs.get("detail_category_type", [])
|
||||
@@ -42,23 +41,32 @@ class Client:
|
||||
Client.raspisanie = self.raspisanie
|
||||
Client.ignore_type = self.ignore_type
|
||||
|
||||
self.key_url = urljoin(self.base_url, "xtgl/login_getPublicKey.html")
|
||||
self.login_url = urljoin(self.base_url, "xtgl/login_slogin.html")
|
||||
self.kaptcha_url = urljoin(self.base_url, "kaptcha")
|
||||
self.headers = requests.utils.default_headers()
|
||||
self.headers["Referer"] = self.login_url
|
||||
self.headers["User-Agent"] = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
|
||||
self.headers["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3"
|
||||
self._set_base_url(kwargs.get("base_url"))
|
||||
self.sess = requests.Session()
|
||||
self.sess.keep_alive = False
|
||||
self.cookies = cookies
|
||||
|
||||
def _set_base_url(self, base_url):
|
||||
"""规范化教务系统根地址并同步登录相关接口。"""
|
||||
self.base_url = base_url.rstrip("/") + "/"
|
||||
self.key_url = urljoin(self.base_url, "xtgl/login_getPublicKey.html")
|
||||
self.login_url = urljoin(self.base_url, "xtgl/login_slogin.html")
|
||||
self.kaptcha_url = urljoin(self.base_url, "kaptcha")
|
||||
self.headers["Referer"] = self.login_url
|
||||
|
||||
def login(self, sid, password):
|
||||
"""登录教务系统"""
|
||||
need_verify = False
|
||||
try:
|
||||
# 登录页
|
||||
req_csrf = self.sess.get(self.login_url, headers=self.headers, timeout=self.timeout)
|
||||
# 部分学校将正方系统部署在 /jwglxt/ 下;根路径登录页不存在时自动兼容
|
||||
if req_csrf.status_code == 404 and urlparse(self.base_url).path in ("", "/"):
|
||||
self._set_base_url(urljoin(self.base_url, "jwglxt/"))
|
||||
req_csrf = self.sess.get(self.login_url, headers=self.headers, timeout=self.timeout)
|
||||
if req_csrf.status_code != 200:
|
||||
return {"code": 2333, "msg": "教务系统挂了"}
|
||||
# 获取csrf_token
|
||||
|
||||
Reference in New Issue
Block a user