@@ -18,32 +18,67 @@ class Learn:
1818
1919 def __init__ (self , language : Language = Language .ENGLISH , * args , ** kwargs ) -> None :
2020 self .client = Client (language , * args , ** kwargs )
21+
22+ """使用浏览器进行统一用户登录"""
23+ def login (self ) -> None :
24+ from ..login .browser import login_with_browser
25+
26+ try :
27+ cookies = login_with_browser ()
28+
29+ # 将cookies设置到client中
30+ for name , value in cookies .items ():
31+ self .client .cookies [name ] = value
32+
33+ # 验证登录是否成功,尝试访问课程页面
34+ response = self .client .get (url = url .make_url (path = "/f/wlxt/index/course/student/" ))
35+ if response .status_code == 200 :
36+ print ("浏览器登录成功!" )
37+ else :
38+ raise Exception ("登录验证失败,请重试" )
39+
40+ except Exception as e :
41+ print (f"浏览器登录失败: { e } " )
2142
22- def login (self , username : str , password : str ) -> None :
23- response : Response = self .client .get (url = url .make_url ())
24- soup : BeautifulSoup = BeautifulSoup (
25- markup = response .text , features = "html.parser"
26- )
27- login_form : Tag = cast (Tag , soup .select_one (selector = "#loginForm" ))
28- action : str = cast (str , login_form ["action" ])
29- response : Response = self .client .post (
30- url = action , data = {"i_user" : username , "i_pass" : password , "atOnce" : True }
31- )
32- soup : BeautifulSoup = BeautifulSoup (
33- markup = response .text , features = "html.parser"
34- )
35- a : Tag = cast (Tag , soup .select_one (selector = "a" ))
36- href : str = cast (str , a ["href" ])
37- parse_result : ParseResult = urllib .parse .urlparse (url = href )
38- query : dict [str , list [str ]] = urllib .parse .parse_qs (qs = parse_result .query )
39- status , ticket = query ["status" ][0 ], query ["ticket" ][0 ]
40- self .client .get (url = href )
41- self .client .get (
42- url = url .make_url (path = "/b/j_spring_security_thauth_roaming_entry" ),
43- params = {"ticket" : ticket },
44- )
45- self .client .get (url = url .make_url (path = "/f/wlxt/index/course/student/" ))
46- assert status == "SUCCESS"
43+ # def login(self, username: str = None, password: str = None) -> None:
44+ # """
45+ # 登录方法
46+ # 如果提供了用户名和密码,使用传统登录方式(保留兼容性)
47+ # 否则使用浏览器登录方式
48+ # """
49+ # if username and password:
50+ # # 使用传统的用户名密码登录方式
51+ # self._login_with_credentials(username, password)
52+ # else:
53+ # # 使用新的浏览器登录方式
54+ # self.login_with_browser()
55+
56+ # def _login_with_credentials(self, username: str, password: str) -> None:
57+ # """传统的用户名密码登录方式(保留作为备用)"""
58+ # response: Response = self.client.get(url=url.make_url())
59+ # soup: BeautifulSoup = BeautifulSoup(
60+ # markup=response.text, features="html.parser"
61+ # )
62+ # login_form: Tag = cast(Tag, soup.select_one(selector="#loginForm"))
63+ # action: str = cast(str, login_form["action"])
64+ # response: Response = self.client.post(
65+ # url=action, data={"i_user": username, "i_pass": password, "atOnce": True}
66+ # )
67+ # soup: BeautifulSoup = BeautifulSoup(
68+ # markup=response.text, features="html.parser"
69+ # )
70+ # a: Tag = cast(Tag, soup.select_one(selector="a"))
71+ # href: str = cast(str, a["href"])
72+ # parse_result: ParseResult = urllib.parse.urlparse(url=href)
73+ # query: dict[str, list[str]] = urllib.parse.parse_qs(qs=parse_result.query)
74+ # status, ticket = query["status"][0], query["ticket"][0]
75+ # self.client.get(url=href)
76+ # self.client.get(
77+ # url=url.make_url(path="/b/j_spring_security_thauth_roaming_entry"),
78+ # params={"ticket": ticket},
79+ # )
80+ # self.client.get(url=url.make_url(path="/f/wlxt/index/course/student/"))
81+ # assert status == "SUCCESS"
4782
4883 @functools .cached_property
4984 def semesters (self ) -> Sequence [Semester ]:
0 commit comments