zhongxinghong / PKUAutoElective

北大选课网补退选阶段自动选课小工具
MIT License
668 stars 231 forks source link

利用tt识图的刷课机能正常使用吗? https://github.com/KingOfDeBug/PKUElective2021Spring 大家可以测试一下api对不对 #73

Open KingOfDeBug opened 2 years ago

KingOfDeBug commented 2 years ago

Check List

Version / Environment

System infomation: [ ] ( Windows10 64bit, MacOS 10.13.6, Ubuntu 18.04.3 amd64, ... ) Python version: [ ] ( run python3 --version ) AutoElective version: [ ] ( run python3 main.py --version )

Config

除了学号/密码外的其他配置

Issue Description

What

遇到的问题

Console Log

必要的终端输出信息

Reproduce

如有必要,提供复现的步骤

pkuhanxuan commented 2 years ago

是不是新版的验证码是gif 貌似不能成功识别 出现了AssertionError: JPEG

Azenith-0208 commented 2 years ago

似乎无法到达指定选课页面? [ERROR] loop.error, 10:34:25, [103] unable to get normal Supplement page 4

Totoro-Li commented 2 years ago

同学您好, 我对您的repo进行了认真测试,发现在作如下修改后可以正常刷课

  1. (可选)您调用的是TT平台默认的英文数字混合,在改版后识别率欠佳,我对captcha/online.py中的TTShituRecognizer类进行修改,对data增加typeid==1003,调用平台的数英混合2。
  2. (必须)您的代码确实如楼上同学所说,出现loop.error, 10:34:25, [103] unable to get normal Supplement page 4问题,阅读log发现是html parsing错误,我的解决方法是将您repo中的captcha文件夹和exceptions替换至zhongxinghong的PKUAutoElective,并对照修改loop.py,这样可以正常运行。
  3. 考虑server酱如今开始收费,我换用sre24平台重写了一个微信实时消息通知,可以在选课成功、失败、程序崩溃时提供微信通知。

顺祝学祺

pkuhanxuan commented 2 years ago

测试api没有问题 但是出现了[ERROR] loop.error, 11:40:30, [104] unable to parse HTML content

Somoku commented 2 years ago

测试api没有问题 但是出现了[ERROR] loop.error, 11:40:30, [104] unable to parse HTML content

您可以按照Totoro-Li的方法对照PKUAutoElective进行修改,这是html parsing的错误。我上传了修改后的repo,可以正常使用,但存在Totoro-Li指出的识别率低的问题。

pkuhanxuan commented 2 years ago

抱歉...‘captcha文件夹和exceptions替换至zhongxinghong的PKUAutoElective,并对照修改loop.py,这样可以正常运行。’ 没太懂是什么意思 是把这些文件夹和文件全都替换成原来的zhongxinghong的相应同名文件和文件夹吗?

sjjs5649 commented 2 years ago

求问现在这个刷课机还能继续使用吗

wzk1015 commented 2 years ago

抱歉...‘captcha文件夹和exceptions替换至zhongxinghong的PKUAutoElective,并对照修改loop.py,这样可以正常运行。’ 没太懂是什么意思 是把这些文件夹和文件全都替换成原来的zhongxinghong的相应同名文件和文件夹吗?

看楼上这个同学的库就行,实测可以正常使用

https://github.com/Somoku/PKUElective2022Spring

sjjs5649 commented 2 years ago

抱歉...‘captcha文件夹和exceptions替换至zhongxinghong的PKUAutoElective,并对照修改loop.py,这样可以正常运行。’ 没太懂是什么意思 是把这些文件夹和文件全都替换成原来的zhongxinghong的相应同名文件和文件夹吗?

看楼上这个同学的库就行,实测可以正常使用

https://github.com/Somoku/PKUElective2022Spring

谢谢!

sjjs5649 commented 2 years ago

抱歉...‘captcha文件夹和exceptions替换至zhongxinghong的PKUAutoElective,并对照修改loop.py,这样可以正常运行。’ 没太懂是什么意思 是把这些文件夹和文件全都替换成原来的zhongxinghong的相应同名文件和文件夹吗?

看楼上这个同学的库就行,实测可以正常使用

https://github.com/Somoku/PKUElective2022Spring

小白想请问一下api密钥怎么处理呢

Totoro-Li commented 2 years ago

抱歉...‘captcha文件夹和exceptions替换至zhongxinghong的PKUAutoElective,并对照修改loop.py,这样可以正常运行。’ 没太懂是什么意思 是把这些文件夹和文件全都替换成原来的zhongxinghong的相应同名文件和文件夹吗?

看楼上这个同学的库就行,实测可以正常使用 https://github.com/Somoku/PKUElective2022Spring

小白想请问一下api密钥怎么处理呢

这里指的应该是apikey.json,按照原repo README前往http://www.ttshitu.com/ 注册,充值1rmb买500次,然后填写用户名密码即可

sjjs5649 commented 2 years ago

抱歉...‘captcha文件夹和exceptions替换至zhongxinghong的PKUAutoElective,并对照修改loop.py,这样可以正常运行。’ 没太懂是什么意思 是把这些文件夹和文件全都替换成原来的zhongxinghong的相应同名文件和文件夹吗?

看楼上这个同学的库就行,实测可以正常使用 https://github.com/Somoku/PKUElective2022Spring

小白想请问一下api密钥怎么处理呢

这里指的应该是apikey.json,按照原repo README前往http://www.ttshitu.com/ 注册,充值1rmb买500次,然后填写用户名密码即可

在网站里怎么操作呢www,不知道怎么导入apikey.json

pkuhanxuan commented 2 years ago

请首先将 apikey.sample.ini 复制一份并改名为 apikey.ini,并按照以下说明进行配置。 这句话是不是错误了 应该是‘请首先将 apikey.sample.json 复制一份并改名为 apikey.json,并按照以下说明进行配置。’

Somoku commented 2 years ago

请首先将 apikey.sample.ini 复制一份并改名为 apikey.ini,并按照以下说明进行配置。 这句话是不是错误了 应该是‘请首先将 apikey.sample.json 复制一份并改名为 apikey.json,并按照以下说明进行配置。’

已修改,感谢指正!

Somoku commented 2 years ago

抱歉...‘captcha文件夹和exceptions替换至zhongxinghong的PKUAutoElective,并对照修改loop.py,这样可以正常运行。’ 没太懂是什么意思 是把这些文件夹和文件全都替换成原来的zhongxinghong的相应同名文件和文件夹吗?

看楼上这个同学的库就行,实测可以正常使用 https://github.com/Somoku/PKUElective2022Spring

小白想请问一下api密钥怎么处理呢

这里指的应该是apikey.json,按照原repo README前往http://www.ttshitu.com/ 注册,充值1rmb买500次,然后填写用户名密码即可

在网站里怎么操作呢www,不知道怎么导入apikey.json

在网站内只需要注册账号并充值。之后将本地的apikey.sample.json复制一份,改名为apikey.json后参考README对其内容进行修改即可。

sjjs5649 commented 2 years ago

还是不懂。。。 怎样修改呢我根本打不开这个文件

Somoku commented 2 years ago

还是不懂。。。 怎样修改呢我根本打不开这个文件

用记事本或者其它IDE打开即可

sjjs5649 commented 2 years ago

还是不懂。。。 怎样修改呢我根本打不开这个文件

用记事本或者其它IDE打开即可

感谢!!

sjjs5649 commented 2 years ago

还是不懂。。。 怎样修改呢我根本打不开这个文件

用记事本或者其它IDE打开即可

可以再问一个问题吗,复制的文件时而和原文件放在当前文件夹里吗

pkuhanxuan commented 2 years ago

还是不懂。。。 怎样修改呢我根本打不开这个文件

用记事本或者其它IDE打开即可

可以再问一个问题吗,复制的文件时而和原文件放在当前文件夹里吗

json那个文件是的 如果是多线程创建多个config.ini文件的话是要新建一个config文件夹 详情请见zhongxinghong的PKUAutoElective

sjjs5649 commented 2 years ago

还是不懂。。。 怎样修改呢我根本打不开这个文件

用记事本或者其它IDE打开即可

可以再问一个问题吗,复制的文件时而和原文件放在当前文件夹里吗

json那个文件是的 如果是多线程创建多个config.ini文件的话是要新建一个config文件夹 详情请见zhongxinghong的PKUAutoElective

可是最后运行的时候python还是闪退怎么办呀www

pkuhanxuan commented 2 years ago

测试识图平台的一大坨命令行 第一个单词python是不是应该改成python3?还是说这个根据不同的python配置环境因人而异?

pkuhanxuan commented 2 years ago

具体什么情况能截图或者仔细描述一下不 我亲测选了一门课 应该没有什么问题的

sjjs5649 commented 2 years ago

具体什么情况能截图或者仔细描述一下不 我亲测选了一门课 应该没有什么问题的 我按照readme配置了,然后就是闪退了。。

sjjs5649 commented 2 years ago

具体什么情况能截图或者仔细描述一下不 我亲测选了一门课 应该没有什么问题的

图鉴上充了1r

pkuhanxuan commented 2 years ago

具体什么情况能截图或者仔细描述一下不 我亲测选了一门课 应该没有什么问题的 我按照readme配置了,然后就是闪退了。。

换一个shell试试?我用的bash

sjjs5649 commented 2 years ago

具体什么情况能截图或者仔细描述一下不 我亲测选了一门课 应该没有什么问题的 我按照readme配置了,然后就是闪退了。。

换一个shell试试?我用的bash 感觉还是配置出问题了。。但是不知道出在哪里

sjjs5649 commented 2 years ago

不弄了 感觉根本就不行

Betty-CN commented 2 years ago

https://github.com/Somoku/PKUElective2022Spring

请问出现 xx课程 is not in your course plan是什么原因呢,试了一下在补退选界面第一页的是可以选的,但是后面的就会报这个错

Spc2333 commented 2 years ago

抱歉...‘captcha文件夹和exceptions替换至zhongxinghong的PKUAutoElective,并对照修改loop.py,这样可以正常运行。’ 没太懂是什么意思 是把这些文件夹和文件全都替换成原来的zhongxinghong的相应同名文件和文件夹吗?

看楼上这个同学的库就行,实测可以正常使用

https://github.com/Somoku/PKUElective2022Spring

请问出现报错: [INFO] loop, 00:21:38, Try to login IAAA (client: 1) [INFO] loop, 00:21:38, User-Agent: Mozilla/5.0 (iPad; CPU OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Mobile/14F89 [ERROR] loop.error, 00:21:39, HTTPSConnectionPool(host='iaaa.pku.edu.cn', port=443): Max retries exceeded with url: /iaaa/oauth.jsp?appID=syllabus&appName=%E5%AD%A6%E7%94%9F%E9%80%89%E8%AF%BE%E7%B3%BB%E7%BB%9F&redirectUrl=http%3A%2F%2Felective.pku.edu.cn%3A80%2Felective2008%2FssoLogin.do (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1124)'))) [WARNING] loop, 00:21:39, RequestException encountered 能够怎么解决呢?

pkuhanxuan commented 2 years ago

抱歉...‘captcha文件夹和exceptions替换至zhongxinghong的PKUAutoElective,并对照修改loop.py,这样可以正常运行。’ 没太懂是什么意思 是把这些文件夹和文件全都替换成原来的zhongxinghong的相应同名文件和文件夹吗?

看楼上这个同学的库就行,实测可以正常使用 https://github.com/Somoku/PKUElective2022Spring

请问出现报错: [INFO] loop, 00:21:38, Try to login IAAA (client: 1) [INFO] loop, 00:21:38, User-Agent: Mozilla/5.0 (iPad; CPU OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Mobile/14F89 [ERROR] loop.error, 00:21:39, HTTPSConnectionPool(host='iaaa.pku.edu.cn', port=443): Max retries exceeded with url: /iaaa/oauth.jsp?appID=syllabus&appName=%E5%AD%A6%E7%94%9F%E9%80%89%E8%AF%BE%E7%B3%BB%E7%BB%9F&redirectUrl=http%3A%2F%2Felective.pku.edu.cn%3A80%2Felective2008%2FssoLogin.do (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1124)'))) [WARNING] loop, 00:21:39, RequestException encountered 能够怎么解决呢?

我也遇到过同样的问题 具体原因不清楚 不过终止再重新输入命令行重新开始就又能正常跑了

pkuhanxuan commented 2 years ago

是不是间隔太短 导致request太频繁?

Spc2333 commented 2 years ago

请问是需要将config中的refresh_interval 调大吗

pkuhanxuan commented 2 years ago

请问是需要将config中的refresh_interval 调大吗

可以试试

spicyashi commented 2 years ago

请问报错ValueError: check_hostname requires server_hostname应该怎么处理呢orz

tainblit commented 2 years ago

请问报错ValueError: check_hostname requires server_hostname应该怎么处理呢orz

把vpn关了

spicyashi commented 2 years ago

解决了 非常感谢!

pkuhanxuan commented 2 years ago

Exception in thread Elective: Traceback (most recent call last): File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner self.run() File "/usr/lib/python3.8/threading.py", line 870, in run self._target(*self._args, **self._kwargs) File "/mnt/e/PKUElective2022Spring-main/autoelective/loop.py", line 722, in run_elective_loop raise e File "/mnt/e/PKUElective2022Spring-main/autoelective/loop.py", line 561, in run_elective_loop raise RecognizerError( autoelective.exceptions.RecognizerError: [310] Recognizer: max attempts 15 reached 请问这个是什么错误 为什么每隔一段时间(不固定)都会出现一次

wzk1015 commented 2 years ago

Exception in thread Elective: Traceback (most recent call last): File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner self.run() File "/usr/lib/python3.8/threading.py", line 870, in run self._target(*self._args, **self._kwargs) File "/mnt/e/PKUElective2022Spring-main/autoelective/loop.py", line 722, in run_elective_loop raise e File "/mnt/e/PKUElective2022Spring-main/autoelective/loop.py", line 561, in run_elective_loop raise RecognizerError( autoelective.exceptions.RecognizerError: [310] Recognizer: max attempts 15 reached 请问这个是什么错误 为什么每隔一段时间(不固定)都会出现一次

就是这个识验证码的api的准确率太低了,如果连续15次都识别不对就会异常退出,你可以把代码里的15改大一些

pkuhanxuan commented 2 years ago

Exception in thread Elective: Traceback (most recent call last): File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner self.run() File "/usr/lib/python3.8/threading.py", line 870, in run self._target(*self._args, **self._kwargs) File "/mnt/e/PKUElective2022Spring-main/autoelective/loop.py", line 722, in run_elective_loop raise e File "/mnt/e/PKUElective2022Spring-main/autoelective/loop.py", line 561, in run_elective_loop raise RecognizerError( autoelective.exceptions.RecognizerError: [310] Recognizer: max attempts 15 reached 请问这个是什么错误 为什么每隔一段时间(不固定)都会出现一次

就是这个识验证码的api的准确率太低了,如果连续15次都识别不对就会异常退出,你可以把代码里的15改大一些

意思是说 我刷到有名额的课了 但是填了15词验证码都没对?????

tainblit commented 2 years ago

[ERROR] loop.error, 17:09:13, 'NoneType' object has no attribute 'tobytes' Traceback (most recent call last): File "D:\code\2022spring\autoelective\loop.py", line 527, in run_elective_loop captcha.save(CAPTCHA_CACHE_DIR) File "D:\code\2022spring\autoelective\captcha\captcha.py", line 47, in save md5 = xMD5(oim.tobytes()) AttributeError: 'NoneType' object has no attribute 'tobytes' 请问出现这种状况是什么原因啊,已经尝试获取验证码了,但是没能成功选上

Totoro-Li commented 2 years ago

[ERROR] loop.error, 17:09:13, 'NoneType' object has no attribute 'tobytes' Traceback (most recent call last): File "D:\code\2022spring\autoelective\loop.py", line 527, in run_elective_loop captcha.save(CAPTCHA_CACHE_DIR) File "D:\code\2022spring\autoelective\captcha\captcha.py", line 47, in save md5 = xMD5(oim.tobytes()) AttributeError: 'NoneType' object has no attribute 'tobytes' 请问出现这种状况是什么原因啊,已经尝试获取验证码了,但是没能成功选上

同学您好,我也注意到了这种情况。验证码错误时,少数情况下重试会出现NoneType' object has no attribute 'tobytes'报错,且exceptions中并未提供处理机制。考虑到Captcha类成员函数save()对主要功能并无影响,故可以尝试删除loop.py中line 527以避免程序异常停止。我也在我fork的repo中作了如上修改~

tainblit commented 2 years ago

[ERROR] loop.error, 17:09:13, 'NoneType' object has no attribute 'tobytes' Traceback (most recent call last): File "D:\code\2022spring\autoelective\loop.py", line 527, in run_elective_loop captcha.save(CAPTCHA_CACHE_DIR) File "D:\code\2022spring\autoelective\captcha\captcha.py", line 47, in save md5 = xMD5(oim.tobytes()) AttributeError: 'NoneType' object has no attribute 'tobytes' 请问出现这种状况是什么原因啊,已经尝试获取验证码了,但是没能成功选上

同学您好,我也注意到了这种情况。验证码错误时,少数情况下重试会出现NoneType' object has no attribute 'tobytes'报错,且exceptions中并未提供处理机制。考虑到Captcha类成员函数save()对主要功能并无影响,故可以尝试删除loop.py中line 527以避免程序异常停止。

我试一下,谢谢!

xmcp commented 2 years ago

指出一点,按照现在的补退选逻辑,并不需要在出现名额后才输入验证码;事先输好验证码,然后在有名额时提交也是一种被认定为合法的情况。 在这种流程下,验证码是一个无效的验证方式——程序完全可以在启动时让用户人工通过验证,然后一直持续工作。这样基本不需要接入任何识图API或者使用识别模型也可以实现自动刷新。

目前这场爬虫大战的攻(刷课机开发者)防(选课系统维护者)双方似乎都一直在验证码层面开展军备竞赛,就挺有趣的。 HEED-GUI 是一个演示这种上述流程可能性的 proof of concept。这个项目本身不追求 PKUAutoElective 这么强大的功能(与此相对也更加 “开箱即用”,这是题外话),但思路肯定都是相通的。希望能给各位提供一些灵感。

(叠个甲:我发布上述内容的意图是让验证码的军备竞赛不要继续卷下去,让补退选机制本身的不合理性得到关注。我不希望事情发展方向超出了这个目的。我之前也提过一些想法:希望学生24小时不停刷新是一个不切实际的流程,这种机制下“老实人”是非常吃亏的;如果学校一定要在补退选阶段通过时效性来衡量学生的选课意愿,可以考虑每5分钟或者30分钟抽一次签,这样至少能够让机器相对于听闻扩名额后火速登录选课网的人失去优势,同时也能筛选掉一些不太关心这门课的人。虽然在之前选课网“座谈”的时候我托朋友转述过,但目前看来并没有人真打算解决这个elephant in the room)

pkuhanxuan commented 2 years ago

断开重新连接wifi后程序会暂停 必须ctrl+c ctrl+p enter之后才能继续运行 有遇到类似情况的人吗

neo-258 commented 2 years ago

[INFO] loop, 04:59:08, Course(课程,100 / 0) is AVAILABLE now ! [INFO] loop, 04:59:08, Try to elect Course [INFO] loop, 04:59:08, Fetch a captcha [INFO] loop, 04:59:17, Recognition result: ps7e [INFO] loop, 04:59:17, Validation failed [ERROR] loop.error, 04:59:17, 'NoneType' object has no attribute 'tobytes' Traceback (most recent call last): File "D:\软件\PKUElective2022Spring-main\autoelective\loop.py", line 527, in run_elective_loop captcha.save(CAPTCHA_CACHE_DIR) File "D:\软件\PKUElective2022Spring-main\autoelective\captcha\captcha.py", line 47, in save md5 = xMD5(oim.tobytes()) AttributeError: 'NoneType' object has no attribute 'tobytes' 想请问 为什么会出现已选人数为0然后就终止的问题呢

tainblit commented 2 years ago

[INFO] loop, 04:59:08, Course(课程,100 / 0) is AVAILABLE now ! [INFO] loop, 04:59:08, Try to elect Course [INFO] loop, 04:59:08, Fetch a captcha [INFO] loop, 04:59:17, Recognition result: ps7e [INFO] loop, 04:59:17, Validation failed [ERROR] loop.error, 04:59:17, 'NoneType' object has no attribute 'tobytes' Traceback (most recent call last): File "D:\软件\PKUElective2022Spring-main\autoelective\loop.py", line 527, in run_elective_loop captcha.save(CAPTCHA_CACHE_DIR) File "D:\软件\PKUElective2022Spring-main\autoelective\captcha\captcha.py", line 47, in save md5 = xMD5(oim.tobytes()) AttributeError: 'NoneType' object has no attribute 'tobytes' 想请问 为什么会出现已选人数为0然后就终止的问题呢

你的报错和我上面提到的一样,可以看一下

AuroraLHL commented 2 years ago

抱歉...‘captcha文件夹和exceptions替换至zhongxinghong的PKUAutoElective,并对照修改loop.py,这样可以正常运行。’ 没太懂是什么意思 是把这些文件夹和文件全都替换成原来的zhongxinghong的相应同名文件和文件夹吗?

看楼上这个同学的库就行,实测可以正常使用 https://github.com/Somoku/PKUElective2022Spring

谢谢!

感觉可以,谢谢!

Totoro-Li commented 2 years ago

如果有同学因各种原因无法及时查看刷课机运行状态,希望得到实时微信消息推送,比如选课成功提醒之类的,也许可以试一下我修改后的刷课机,其中同时移除了原repo一处可能导致程序崩溃的bug。

https://github.com/Totoro-Li/PKUElective2022Spring

wuweisikui commented 2 years ago

请问 ModuleNotFoundError: No module named 'requests' 如何解决呢