socialsisteryi / cxkitty Goto Github PK
View Code? Open in Web Editor NEW超星学习通答题姬(视频文档观看、模拟答题,无需浏览器、无需油猴,容器/host 运行ok!
License: GNU General Public License v3.0
超星学习通答题姬(视频文档观看、模拟答题,无需浏览器、无需油猴,容器/host 运行ok!
License: GNU General Public License v3.0
2022-12-16 17:29:17,890 [MainAPI] INFO -> -----任务开始执行-----
2022-12-16 17:29:19,410 [MainAPI] INFO -> 课程列表拉取成功 共 38 个
2022-12-16 17:29:32,937 [Classes] INFO -> 获取课程 章节列表成功 共 67 个 [美术鉴赏(Cou.210599244/Cla.63236432)]
2022-12-16 17:29:33,048 [Chapters] INFO -> 任务点状态已更新
2022-12-16 17:29:35,488 [Chapters] INFO -> 获取章节任务节点卡片成功 共 0 个 [1:美术鉴赏(Id.283986394)]
2022-12-16 17:29:35,488 [Chapters] INFO -> 章节 任务节点解析成功 共 0 个 [1:美术鉴赏(Id.283986394)]
2022-12-16 17:29:40,169 [Chapters] INFO -> 获取章节任务节点卡片成功 共 3 个 [1.1:美术作品和艺术哲学(Id.283986397)]
2022-12-16 17:29:40,172 [Chapters] DEBUG -> (0) 解析卡片成功 共 0 个任务点
2022-12-16 17:29:40,173 [Chapters] DEBUG -> (1) 解析卡片成功 共 1 个任务点
2022-12-16 17:29:40,173 [Chapters] DEBUG -> (1, 0) 视频任务点 schema: {'objectid': '53a80cd1a3103c3a4ed90b5e', 'name': 'TS127A60277A1.mp4', 'size': 187172901, 'hsize': '178.5 MB', 'type': '.mp4', 'mid': '523990373441404114462982', '_jobid': 1404114463260, 'fastforward': 'true', 'switchwindow': 'true', 'jobid': 1404114463260, 'retract': 'true'}
2022-12-16 17:29:40,174 [Chapters] DEBUG -> (2) 解析卡片成功 共 1 个任务点
2022-12-16 17:29:40,174 [Chapters] DEBUG -> (2, 0) 测验任务点 schema: {'workid': 'd5ea0aed5ecf4c6287247bd3b83a9906', 'title': '美术作品和艺术哲学', 'worktype': 'workA', 'mid': '11011725886731533366345488', '_jobid': 'work-d5ea0aed5ecf4c6287247bd3b83a9906', 'jobid': 'work-d5ea0aed5ecf4c6287247bd3b83a9906'}
2022-12-16 17:29:40,174 [Chapters] INFO -> 章节 任务节点解析成功 共 2 个 [1.1:美术作品和艺术哲学(Id.283986397)]
2022-12-16 17:29:49,648 [PointVideo] ERROR -> 预拉取失败
2022-12-16 17:29:49,882 [MainAPI] ERROR -> -----程序运行异常退出-----
Traceback (most recent call last):
File "d:\网课\CxKitty\cxapi\jobs\video.py", line 76, in pre_fetch
raise ValueError
ValueError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "d:\网课\CxKitty\main.py", line 131, in
fuck_task_worker(chap)
File "d:\网课\CxKitty\main.py", line 69, in fuck_task_worker
prefetch_status = task_point.pre_fetch()
File "d:\网课\CxKitty\cxapi\jobs\video.py", line 89, in pre_fetch
raise RuntimeError('视频预拉取出错')
RuntimeError: 视频预拉取出错
我的流程pycharm新建项目地址是https://github.com/SocialSisterYi/CxKitty
然后新建本届3.10的解释器pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -v Poetry==1.5.1
然后install poetry出现下面错误
我的办法是看pyproject.toml和poetry.lock这个看看我还少什么 不然肯定跑不起来
CalledProcessError
Command '['F:\code\CxKitty\venv\Scripts\python.exe', '-m', 'pip', 'uninstall', 'charset-normalizer', '-y']' returned non-zero exit status 2.
at ~\AppData\Local\Programs\Python\Python310\lib\subprocess.py:524 in run
520│ # We don't call process.wait() as .exit does that for us.
521│ raise
522│ retcode = process.poll()
523│ if check and retcode:
→ 524│ raise CalledProcessError(retcode, process.args,
525│ output=stdout, stderr=stderr)
526│ return CompletedProcess(process.args, retcode, stdout, stderr)
527│
528│
The following error occurred when trying to handle this error:
EnvCommandError
Command ['F:\code\CxKitty\venv\Scripts\python.exe', '-m', 'pip', 'uninstall', 'charset-normalizer', '-y'] errored with the following return code 2
Output:
Found existing installation: charset-normalizer 3.2.0
Uninstalling charset-normalizer-3.2.0:
Successfully uninstalled charset-normalizer-3.2.0
ERROR: Exception:
Traceback (most recent call last):
File "F:\code\CxKitty\venv\lib\site-packages\pip_internal\cli\base_command.py", line 160, in exc_logging_wrapper
status = run_func(*args)
File "F:\code\CxKitty\venv\lib\site-packages\pip_internal\commands\uninstall.py", line 103, in run
uninstall_pathset.commit()
File "F:\code\CxKitty\venv\lib\site-packages\pip_internal\req\req_uninstall.py", line 424, in commit
self.moved_paths.commit()
File "F:\code\CxKitty\venv\lib\site-packages\pip_internal\req\req_uninstall.py", line 277, in commit
save_dir.cleanup()
File "F:\code\CxKitty\venv\lib\site-packages\pip_internal\utils\temp_dir.py", line 173, in cleanup
rmtree(self.path)
File "F:\code\CxKitty\venv\lib\site-packages\pip_vendor\tenacity_init.py", line 328, in wrapped_f
return self(f, *args, **kw)
File "F:\code\CxKitty\venv\lib\site-packages\pip_vendor\tenacity_init.py", line 408, in call
do = self.iter(retry_state=retry_state)
2023-04-10 23:52:29,915 [PointVideo] ERROR -> 预拉取失败
2023-04-10 23:52:29,956 [MainAPI] ERROR -> -----程序运行异常退出-----
Traceback (most recent call last):
File "cxapi\jobs\video.py", line 95, in pre_fetch
ValueError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "main.py", line 129, in
File "main.py", line 68, in fuck_task_worker
File "cxapi\jobs\video.py", line 117, in pre_fetch
RuntimeError: 视频预拉取出错
经常是一个题库有一个答案错误了,然后错误退出。
2023-01-12 19:25:09,233 [MainAPI] INFO -> 账号会话验证成功
2023-01-12 19:25:09,233 [MainAPI] INFO -> -----任务开始执行-----
2023-01-12 19:25:09,374 [MainAPI] INFO -> 课程列表拉取成功 共 56 个
2023-01-12 19:25:12,874 [Classes] INFO -> 获取课程 章节列表成功 共 220 个 [大学国文(上)(Cou.232482133/Cla.71724353)]
2023-01-12 19:25:12,905 [Chapters] INFO -> 任务点状态已更新
2023-01-12 19:25:12,952 [Chapters] INFO -> 获取章节任务节点卡片成功 共 0 个 [1:总论(Id.512142648)]
2023-01-12 19:25:12,952 [Chapters] INFO -> 章节 任务节点解析成功 共 0 个 [1:总论(Id.512142648)]
2023-01-12 19:25:12,952 [Chapters] INFO -> 忽略完成任务点 [1.1:总论(Id.512142685)]
2023-01-12 19:25:13,061 [Chapters] INFO -> 忽略完成任务点 [1.2:诗经概述(Id.512142734)]
2023-01-12 19:25:13,170 [Chapters] INFO -> 忽略完成任务点 [1.3:孔子编纂说及非孔子编纂说(Id.512142823)]
2023-01-12 19:25:13,280 [Chapters] INFO -> 忽略完成任务点 [1.4:采诗说(Id.512142824)]
2023-01-12 19:25:13,389 [Chapters] INFO -> 忽略完成任务点 [1.5:诗经的内容、艺术特色及传播(Id.512142825)]
2023-01-12 19:25:13,499 [Chapters] INFO -> 忽略完成任务点 [1.6:章节测验(Id.512142828)]
2023-01-12 19:25:13,639 [Chapters] INFO -> 获取章节任务节点卡片成功 共 0 个 [2:诗经(Id.512142649)]
2023-01-12 19:25:13,639 [Chapters] INFO -> 章节 任务节点解析成功 共 0 个 [2:诗经(Id.512142649)]
2023-01-12 19:25:13,639 [Chapters] INFO -> 忽略完成任务点 [2.1:卫风•伯兮(Id.512142682)]
2023-01-12 19:25:13,749 [Chapters] INFO -> 忽略完成任务点 [2.2:王风•黍离(Id.512142712)]
2023-01-12 19:25:13,858 [Chapters] INFO -> 忽略完成任务点 [2.3:《黍离》赏析(Id.512142826)]
2023-01-12 19:25:13,967 [Chapters] INFO -> 忽略完成任务点 [2.4:“黍离麦秀”的文化现象(Id.512142827)]
2023-01-12 19:25:14,077 [Chapters] INFO -> 忽略完成任务点 [2.5:章节测验(Id.512142829)]
2023-01-12 19:25:14,217 [Chapters] INFO -> 获取章节任务节点卡片成功 共 1 个 [3:屈原(Id.512142650)]
2023-01-12 19:25:14,342 [MainAPI] ERROR -> -----程序运行异常退出-----
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\CxKitty-main\main.py", line 129, in
fuck_task_worker(chapter)
File "C:\Users\Administrator\Desktop\CxKitty-main\main.py", line 66, in fuck_task_worker
for task_point in chap.fetch_points_by_index(index): # 获取当前章节的所有任务点, 并遍历
File "C:\Users\Administrator\Desktop\CxKitty-main\cxapi\chapters.py", line 168, in fetch_points_by_index
if card["description"] == "":
KeyError: 'description'
易姐,这门课运行到这个点就会崩,别的课试了下不会
2023-03-28 19:21:21,876 [PointVideo] DEBUG -> 上报 resp: {'isPassed': False, 'videoTimeLimit': False, 'hasJobLimit': False}
2023-03-28 19:21:21,876 [PointVideo] INFO -> 播放上报成功 580/925
2023-03-28 19:22:42,424 [MainAPI] ERROR -> -----*程序运行异常退出*-----
Traceback (most recent call last):
File "D:\Download\Projects\CxKitty\.venv\Lib\site-packages\urllib3\connectionpool.py", line 703, in urlopen
httplib_response = self._make_request(
^^^^^^^^^^^^^^^^^^^
File "D:\Download\Projects\CxKitty\.venv\Lib\site-packages\urllib3\connectionpool.py", line 449, in _make_request
six.raise_from(e, None)
File "<string>", line 3, in raise_from
File "D:\Download\Projects\CxKitty\.venv\Lib\site-packages\urllib3\connectionpool.py", line 444, in _make_request
httplib_response = conn.getresponse()
^^^^^^^^^^^^^^^^^^
File "C:\Users\TR\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1374, in getresponse
response.begin()
File "C:\Users\TR\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 318, in begin
version, status, reason = self._read_status()
^^^^^^^^^^^^^^^^^^^
File "C:\Users\TR\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 287, in _read_status
raise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without response
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\Download\Projects\CxKitty\.venv\Lib\site-packages\requests\adapters.py", line 489, in send
resp = conn.urlopen(
^^^^^^^^^^^^^
File "D:\Download\Projects\CxKitty\.venv\Lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen
retries = retries.increment(
^^^^^^^^^^^^^^^^^^
File "D:\Download\Projects\CxKitty\.venv\Lib\site-packages\urllib3\util\retry.py", line 550, in increment
raise six.reraise(type(error), error, _stacktrace)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Download\Projects\CxKitty\.venv\Lib\site-packages\urllib3\packages\six.py", line 769, in reraise
raise value.with_traceback(tb)
File "D:\Download\Projects\CxKitty\.venv\Lib\site-packages\urllib3\connectionpool.py", line 703, in urlopen
httplib_response = self._make_request(
^^^^^^^^^^^^^^^^^^^
File "D:\Download\Projects\CxKitty\.venv\Lib\site-packages\urllib3\connectionpool.py", line 449, in _make_request
six.raise_from(e, None)
File "<string>", line 3, in raise_from
File "D:\Download\Projects\CxKitty\.venv\Lib\site-packages\urllib3\connectionpool.py", line 444, in _make_request
httplib_response = conn.getresponse()
^^^^^^^^^^^^^^^^^^
File "C:\Users\TR\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1374, in getresponse
response.begin()
File "C:\Users\TR\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 318, in begin
version, status, reason = self._read_status()
^^^^^^^^^^^^^^^^^^^
File "C:\Users\TR\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 287, in _read_status
raise RemoteDisconnected("Remote end closed connection without"
urllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\Download\Projects\CxKitty\main.py", line 129, in <module>
fuck_task_worker(chapter)
File "D:\Download\Projects\CxKitty\main.py", line 87, in fuck_task_worker
task_point.playing(lay_main, config.VIDEO["speed"], config.VIDEO["report_rate"])
File "D:\Download\Projects\CxKitty\cxapi\jobs\video.py", line 196, in playing
report_result = self.__play_report(playing_time)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Download\Projects\CxKitty\cxapi\jobs\video.py", line 138, in __play_report
resp = self.session.get(
^^^^^^^^^^^^^^^^^
File "D:\Download\Projects\CxKitty\.venv\Lib\site-packages\requests\sessions.py", line 600, in get
return self.request("GET", url, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Download\Projects\CxKitty\.venv\Lib\site-packages\requests\sessions.py", line 587, in request
resp = self.send(prep, **send_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Download\Projects\CxKitty\.venv\Lib\site-packages\requests\sessions.py", line 701, in send
r = adapter.send(request, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Download\Projects\CxKitty\.venv\Lib\site-packages\requests\adapters.py", line 547, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
易姐yyds,请问能否实现一次选多个科目,谢谢
docker run socialsisteryi/cx-kitty root@akg 10:40:27
█████████ █████ ████ ███ █████ █████
███░░░░░███ ░░███ ███░ ░░░ ░░███ ░░███
███ ░░░ █████ █████ ░███ ███ ████ ███████ ███████ █████ ████
░███ ░░███ ░░███ ░███████ ░░███ ░░░███░ ░░░███░ ░░███ ░███
░███ ░░░█████░ ░███░░███ ░███ ░███ ░███ ░███ ░███
░░███ ███ ███░░░███ ░███ ░░███ ░███ ░███ ███ ░███ ███ ░███ ░███
░░█████████ █████ █████ █████ ░░████ █████ ░░█████ ░░█████ ░░███████
░░░░░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░███
███ ░███
░░██████
░░░░░░
超星学习通答题姬 Ver0.4.2
SocialSisterYi
─────────────────────────────────────
会话存档为空, 请登录账号
请输入手机号, 留空为二维码登录: ╭───────────────────── Traceback (most recent call last) ──────────────────────╮
│ /app/main.py:262 in <module> │
│ │
│ 259 │ # 会话存档为空 │
│ 260 │ else: │
│ 261 │ │ console.print("[yellow]会话存档为空, 请登录账号") │
│ ❱ 262 │ │ dialog.login(console, api) │
│ 263 │ logger.info("\n-----*任务开始执行*-----") │
│ 264 │ dialog.accinfo(console, api) │
│ 265 │ try: │
│ │
│ /app/dialog.py:64 in login │
│ │
│ 61 def login(tui_ctx: Console, api: ChaoXingAPI): │
│ 62 │ "交互-登录账号" │
│ 63 │ while True: │
│ ❱ 64 │ │ uname = Prompt.ask("[yellow]请输入手机号, 留空为二维码登录[/]" │
│ 65 │ │ tui_ctx.print('') │
│ 66 │ │ # 二维码登录 │
│ 67 │ │ if uname == "": │
│ │
│ /app/.venv/lib/python3.10/site-packages/rich/prompt.py:141 in ask │
│ │
│ 138 │ │ │ show_default=show_default, │
│ 139 │ │ │ show_choices=show_choices, │
│ 140 │ │ ) │
│ ❱ 141 │ │ return _prompt(default=default, stream=stream) │
│ 142 │ │
│ 143 │ def render_default(self, default: DefaultType) -> Text: │
│ 144 │ │ """Turn the supplied default in to a Text instance. │
│ │
│ /app/.venv/lib/python3.10/site-packages/rich/prompt.py:274 in __call__ │
│ │
│ 271 │ │ while True: │
│ 272 │ │ │ self.pre_prompt() │
│ 273 │ │ │ prompt = self.make_prompt(default) │
│ ❱ 274 │ │ │ value = self.get_input(self.console, prompt, self.password │
│ 275 │ │ │ if value == "" and default != ...: │
│ 276 │ │ │ │ return default │
│ 277 │ │ │ try: │
│ │
│ /app/.venv/lib/python3.10/site-packages/rich/prompt.py:203 in get_input │
│ │
│ 200 │ │ Returns: │
│ 201 │ │ │ str: String from user. │
│ 202 │ │ """ │
│ ❱ 203 │ │ return console.input(prompt, password=password, stream=stream) │
│ 204 │ │
│ 205 │ def check_choice(self, value: str) -> bool: │
│ 206 │ │ """Check value is in the list of valid choices. │
│ │
│ /app/.venv/lib/python3.10/site-packages/rich/console.py:2102 in input │
│ │
│ 2099 │ │ │ if stream: │
│ 2100 │ │ │ │ result = stream.readline() │
│ 2101 │ │ │ else: │
│ ❱ 2102 │ │ │ │ result = input() │
│ 2103 │ │ return result │
│ 2104 │ │
│ 2105 │ def export_text(self, *, clear: bool = True, styles: bool = False │
╰──────────────────────────────────────────────────────────────────────────────╯
EOFError: EOF when reading a line
log里的
2023-09-10 19:01:49,528 [Chapters] DEBUG -> (0, 0) 视频任务点 schema: {'jobid': '1658751832167113', 'switchwindow': 'true', 'rt': '0.9', 'size': 608615583, 'fastforward': 'true', 'hsize': '580.42 MB', 'name': '“沙棘红”映照不渝初心.mp4', 'mid': '1726023073961658751831780', 'type': '.mp4', 'doublespeed': 1, 'objectid': '8dbeeb707a23a25745f764087ad6bad7', '_jobid': '1658751832167113', 'ywbf': 1}
2023-09-10 19:01:49,528 [Chapters] INFO -> 章节 任务节点解析成功 共 1 个 [7.2.1:"沙棘红"映照不渝初心(Id.765173883)]
2023-09-10 19:01:49,748 [Main] ERROR ->
-----*程序运行异常退出*-----
Traceback (most recent call last):
File "D:\My_Project\CxKitty-main\CxKitty-main\main.py", line 362, in <module>
fuck_task_worker(task_obj)
File "D:\My_Project\CxKitty-main\CxKitty-main\main.py", line 164, in fuck_task_worker
task_point.fetch_attachment()
File "D:\My_Project\CxKitty-main\CxKitty-main\cxapi\base.py", line 134, in fetch_attachment
self.attachment = json.loads(r.group(1))
File "D:\Program Files\Anaconda\envs\py310\lib\json\__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "D:\Program Files\Anaconda\envs\py310\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "D:\Program Files\Anaconda\envs\py310\lib\json\decoder.py", line 353, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Unterminated string starting at: line 1 column 1718 (char 1717)
命令行里的
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ D:\My_Project\CxKitty-main\CxKitty-main\main.py:362 in <module> │
│ │
│ 359 │ │ for task_obj in ClassSelector(command, classes): │
│ 360 │ │ │ # 章节容器 执行章节任务 │
│ 361 │ │ │ if isinstance(task_obj, ChapterContainer): │
│ ❱ 362 │ │ │ │ fuck_task_worker(task_obj) │
│ 363 │ │ │ │
│ 364 │ │ │ # 考试对象 执行考试任务 │
│ 365 │ │ │ elif isinstance(task_obj, ExamDto): │
│ │
│ D:\My_Project\CxKitty-main\CxKitty-main\main.py:164 in fuck_task_worker │
│ │
│ 161 │ │ │ for task_point in chap[index]: │
│ 162 │ │ │ │ # 拉取任务卡片 Attachment │
│ 163 │ │ │ │ try: │
│ ❱ 164 │ │ │ │ │ task_point.fetch_attachment() │
│ 165 │ │ │ │ except ChapterNotOpened: │
│ 166 │ │ │ │ │ lay_left.unsplit() │
│ 167 │ │ │ │ │ lay_left.update( │
│ │
│ D:\My_Project\CxKitty-main\CxKitty-main\cxapi\base.py:134 in fetch_attachment │
│ │
│ 131 │ │ │ r"window\.AttachmentSetting *= *(.+?);", │
│ 132 │ │ │ html.head.find("script", type="text/javascript").text, │
│ 133 │ │ ): │
│ ❱ 134 │ │ │ self.attachment = json.loads(r.group(1)) │
│ 135 │ │ │ self.logger.debug(f"Attachment: {self.attachment}") │
│ 136 │ │ else: │
│ 137 │ │ │ if t := html.select_one("p.blankTips"): │
│ │
│ D:\Program Files\Anaconda\envs\py310\lib\json\__init__.py:346 in loads │
│ │
│ 343 │ if (cls is None and object_hook is None and │
│ 344 │ │ │ parse_int is None and parse_float is None and │
│ 345 │ │ │ parse_constant is None and object_pairs_hook is None and not kw): │
│ ❱ 346 │ │ return _default_decoder.decode(s) │
│ 347 │ if cls is None: │
│ 348 │ │ cls = JSONDecoder │
│ 349 │ if object_hook is not None: │
│ │
│ D:\Program Files\Anaconda\envs\py310\lib\json\decoder.py:337 in decode │
│ │
│ 334 │ │ containing a JSON document). │
│ 335 │ │ │
│ 336 │ │ """ │
│ ❱ 337 │ │ obj, end = self.raw_decode(s, idx=_w(s, 0).end()) │
│ 338 │ │ end = _w(s, end).end() │
│ 339 │ │ if end != len(s): │
│ 340 │ │ │ raise JSONDecodeError("Extra data", s, end) │
│ │
│ D:\Program Files\Anaconda\envs\py310\lib\json\decoder.py:353 in raw_decode │
│ │
│ 350 │ │ │
│ 351 │ │ """ │
│ 352 │ │ try: │
│ ❱ 353 │ │ │ obj, end = self.scan_once(s, idx) │
│ 354 │ │ except StopIteration as err: │
│ 355 │ │ │ raise JSONDecodeError("Expecting value", s, err.value) from None │
│ 356 │ │ return obj, end │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
JSONDecodeError: Unterminated string starting at: line 1 column 1718 (char 1717)
JSON 解析失败, 可能为账号 ck 失效, 请重新登录该账号 (序号+r)
整个exe的启动的呗
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ D:\尤恩\Desktop\xxt脚本\CxKitty-main\main.py:130 in │
│ │
│ 127 │ │ classes = api.fetch_classes() # 拉取该账号下所学的课程 │
│ 128 │ │ course_seq = dialog.select_class(console, classes) # 进行课程选择 │
│ 129 │ │ for chapter in course_seq: # 迭代返回课程章节 │
│ ❱ 130 │ │ │ fuck_task_worker(chapter) │
│ 131 │ except Exception as err: │
│ 132 │ │ console.print_exception(show_locals=False) │
│ 133 │ │ api.logger.error('-----程序运行异常退出-----', exc_info=True) │
│ │
│ D:\尤恩\Desktop\xxt脚本\CxKitty-main\main.py:83 in fuck_task_worker │
│ │
│ 80 │ │ │ │ # 试题类型 │
│ 81 │ │ │ │ if isinstance(task_point, ChapterExam) and CONF_EN_EXAM: │
│ 82 │ │ │ │ │ task_point.mount_searcher(searcher) │
│ ❱ 83 │ │ │ │ │ task_point.fill_and_commit(lay_main) │
│ 84 │ │ │ │ │ # 开始等待 │
│ 85 │ │ │ │ │ wait_for_class(lay_main, CONF_WAIT_EXAM, f'试题《{task_point.title} │
│ 86 │
│ │
│ D:\尤恩\Desktop\xxt脚本\CxKitty-main\cxapi\jobs\exam.py:259 in fill_and_commit │
│ │
│ 256 │ │ │ │ │ JSON.from_data(search_resp, ensure_ascii=False), │
│ 257 │ │ │ │ │ title='题库接口返回' │
│ 258 │ │ │ │ )) │
│ ❱ 259 │ │ │ │ status = self.__fill_answer(question, search_resp) # 填充选项 │
│ 260 │ │ │ │ tb.add_row( │
│ 261 │ │ │ │ │ str(question.q_id), │
│ 262 │ │ │ │ │ question.q_type.name, │
│ │
│ D:\尤恩\Desktop\xxt脚本\CxKitty-main\cxapi\jobs\exam.py:176 in __fill_answer │
│ │
│ 173 │ │ log_suffix = f'[{question.value}(Id.{question.q_id})]' │
│ 174 │ │ self.logger.debug(f'开始填充题目 {log_suffix}') │
│ 175 │ │ if search_resp.get('code') == 1: │
│ ❱ 176 │ │ │ if (r := self.searcher.rsp_query.parse(search_resp)): │
│ 177 │ │ │ │ search_answer: str = r[0].strip() │
│ 178 │ │ │ else: │
│ 179 │ │ │ │ return False # JsonPath 选择器匹配失败返回 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
AttributeError: 'NoneType' object has no attribute 'parse'
程序运行出现错误, 请截图保存并附上 log 文件在 issue 提交
是否可以实现一键录入题库,用同学已经做完的账号录入该课程的题目,然后给自己账号做的时候就方便很多了
这个项目是不是不支持python 3.11.3,我是python 3.11.3运行的时候直接闪退了,连页面都看不见
for task_point in chap[index]:
try:
# 开始分类讨论任务点类型
# 章节测验类型
if isinstance(task_point, PointWorkDto) and (config.WORK_EN or config.WORK["export"] is True):
# 导出作业试题
if config.WORK["export"] is True:
# 预拉取任务点数据
task_point.pre_fetch()
# 保存 json 文件
task_point.export(config.EXPORTPATH / f"work_{task_point.work_id}.json")
这是main.py的一段代码config.WORK["export"] 为Ture 可是export()怎么都不运行
在每一章都有章节测验,这个章节测验是无关紧要的,但是章节测验不提交就看不了下一章导致程序报错,可以在章节测验搜不到题目的时候随机填写或者“都选B”然后点提交以便顺利进入下一章
发生异常: AttributeError
module 'jsonpath' has no attribute 'JSONPath'
使用最新版的VS
运行主程序时打开立马闪退,使用IDLE打开却可以成功运行,这是为什么?
RuntimeError: 视频预拉取出错
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /home/lighthouse/RemoteWorking/CxKitty/cxapi/jobs/video.py:73 in pre_fetch │
│ │
│ 70 │ │ resp.raise_for_status() │
│ 71 │ │ html = BeautifulSoup(resp.text, 'lxml') │
│ 72 │ │ try: │
│ ❱ 73 │ │ │ if r := re.search(r'window\.AttachmentSetting *= *(.+?);', html.head.find('s │
│ 74 │ │ │ │ attachment = json.loads(r.group(1)) │
│ 75 │ │ │ else: │
│ 76 │ │ │ │ raise ValueError │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
AttributeError: 'NoneType' object has no attribute 'text'
During handling of the above exception, another exception occurred:
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /home/lighthouse/RemoteWorking/CxKitty/main.py:131 in <module> │
│ │
│ 128 │ │ classes = api.fetch_classes() # 拉取该账号下所学的课程 │
│ 129 │ │ inp = dialog.select_class(console, classes) # 进行选择课程 │
│ 130 │ │ chap = classes.fetch_chapters_by_index(int(inp)) │
│ ❱ 131 │ │ fuck_task_worker(chap) │
│ 132 │ except Exception as err: │
│ 133 │ │ console.print_exception(show_locals=False) │
│ 134 │ │ api.logger.error('-----*程序运行异常退出*-----', exc_info=True) │
│ │
│ /home/lighthouse/RemoteWorking/CxKitty/main.py:69 in fuck_task_worker │
│ │
│ 66 │ │ │ │ continue │
│ 67 │ │ │ for task_point in chap.fetch_points_by_index(index): # 获取当前章节的所有任 │
│ 68 │ │ │ │ # 预拉取任务点数据 │
│ ❱ 69 │ │ │ │ prefetch_status = task_point.pre_fetch() │
│ 70 │ │ │ │ if not prefetch_status: │
│ 71 │ │ │ │ │ del task_point │
│ 72 │ │ │ │ │ continue │
│ │
│ /home/lighthouse/RemoteWorking/CxKitty/cxapi/jobs/video.py:89 in pre_fetch │
│ │
│ 86 │ │ │ return False # 非任务点视频不需要完成 │
│ 87 │ │ except Exception: │
│ 88 │ │ │ self.logger.error('预拉取失败') │
│ ❱ 89 │ │ │ raise RuntimeError('视频预拉取出错') │
│ 90 │ │
│ 91 │ def fetch(self) -> bool: │
│ 92 │ │ '拉取视频' │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
RuntimeError: 视频预拉取出错
程序运行出现错误, 请截图保存并附上 log 文件在 issue 提交
2022-12-18 14:08:21,193 [Chapters] INFO -> 获取章节任务节点卡片成功 共 1 个 [8.1:历年真题一(Id.657778397)]
2022-12-18 14:08:21,195 [Chapters] DEBUG -> (0) 解析卡片成功 共 3 个任务点
2022-12-18 14:08:21,195 [Chapters] DEBUG -> (0, 0) 视频任务点 schema: {'objectid': 'a11c45576b67c1ad70ebac4f936da27a', 'name': '2019-12-25-1历年真题一填空单选.avi', 'type': '.avi', 'size': 379664384, 'hsize': '362.08 MB', 'mid': '8266337055801577437367671', '_jobid': '1577437370044633', 'doublespeed': 1, 'retract': 'true'}
2022-12-18 14:08:21,195 [Chapters] DEBUG -> (0, 1) 视频任务点 schema: {'objectid': 'b08b0011303fc585228a5f78c9b13250', 'name': '2019-12-25-3历年真题一计算B.avi', 'type': '.avi', 'size': 520065536, 'hsize': '495.97 MB', 'mid': '11492115890911577437559470', '_jobid': '1577437561660449', 'doublespeed': 1}
2022-12-18 14:08:21,196 [Chapters] DEBUG -> (0, 2) 视频任务点 schema: {'objectid': 'ff885a3c7d5cef1d3c17a2fc3f9c76e6', 'name': '2019-12-25-2历年真题一计算A.avi', 'type': '.avi', 'size': 69211136, 'hsize': '66 MB', 'mid': '15727121474031577437410292', '_jobid': '157743741223550', 'doublespeed': 1}
2022-12-18 14:08:21,196 [Chapters] INFO -> 章节 任务节点解析成功 共 3 个 [8.1:历年真题一(Id.657778397)]
2022-12-18 14:08:21,250 [PointVideo] DEBUG -> attachment: {'hiddenConfig': False, 'attachments': [{'begins': 0, 'otherInfo': 'nodeId_657778397-cpi_264685886-rt_d-ds_1-ff_d-be_0_0-vt_1-v_6-enc_f8482df47669eeefc8867e6f2f8e1436&courseId=228640141', 'customType': 0, 'ends': 0, 'property': {'size': 379664384, 'hsize': '362.08 MB', 'retract': 'true', 'module': 'insertvideo', 'name': '2019-12-25-1历年真题一填空单选.avi', 'mid': '8266337055801577437367671', 'type': '.avi', 'doublespeed': 1, 'objectid': 'a11c45576b67c1ad70ebac4f936da27a', '_jobid': '1577437370044633'}, 'mid': '8266337055801577437367671', 'jumpTimePointList': [], 'type': 'video', 'aid': 1274104218, 'objectId': 'a11c45576b67c1ad70ebac4f936da27a'}, {'begins': 0, 'otherInfo': 'nodeId_657778397-cpi_264685886-rt_d-ds_1-ff_d-be_0_0-vt_1-v_6-enc_f8482df47669eeefc8867e6f2f8e1436&courseId=228640141', 'customType': 0, 'ends': 0, 'property': {'size': 520065536, 'hsize': '495.97 MB', 'module': 'insertvideo', 'name': '2019-12-25-3历年真题一计算B.avi', 'mid': '11492115890911577437559470', 'type': '.avi', 'doublespeed': 1, 'objectid': 'b08b0011303fc585228a5f78c9b13250', '_jobid': '1577437561660449'}, 'mid': '11492115890911577437559470', 'jumpTimePointList': [], 'type': 'video', 'aid': 1274104219, 'objectId': 'b08b0011303fc585228a5f78c9b13250'}, {'begins': 0, 'otherInfo': 'nodeId_657778397-cpi_264685886-rt_d-ds_1-ff_d-be_0_0-vt_1-v_6-enc_f8482df47669eeefc8867e6f2f8e1436&courseId=228640141', 'customType': 0, 'ends': 0, 'property': {'size': 69211136, 'hsize': '66 MB', 'module': 'insertvideo', 'name': '2019-12-25-2历年真题一计算A.avi', 'mid': '15727121474031577437410292', 'type': '.avi', 'doublespeed': 1, 'objectid': 'ff885a3c7d5cef1d3c17a2fc3f9c76e6', '_jobid': '157743741223550'}, 'mid': '15727121474031577437410292', 'jumpTimePointList': [], 'type': 'video', 'aid': 1274104220, 'objectId': 'ff885a3c7d5cef1d3c17a2fc3f9c76e6'}, {'begins': 0, 'otherInfo': 'nodeId_657778397-cpi_264685886', 'ends': 0, 'property': {'module': 'insertimage', 'objectid': '58a7296b1e34bc79591396d5acb36550'}, 'aid': 1274104221}, {'begins': 0, 'otherInfo': 'nodeId_657778397-cpi_264685886', 'ends': 0, 'property': {'module': 'insertimage', 'objectid': '49f9dca34c979716348408faaaa0c696'}, 'aid': 1274104222}, {'begins': 0, 'otherInfo': 'nodeId_657778397-cpi_264685886', 'ends': 0, 'property': {'module': 'insertimage', 'objectid': '255a6fbc3341652e9cfb282bef54283c'}, 'aid': 1274104223}, {'begins': 0, 'otherInfo': 'nodeId_657778397-cpi_264685886', 'ends': 0, 'property': {'module': 'insertimage', 'objectid': '3f28d62b72e334187b8e4b9cc82b20a1'}, 'aid': 1274104224}, {'begins': 0, 'otherInfo': 'nodeId_657778397-cpi_264685886', 'ends': 0, 'property': {'module': 'insertimage', 'objectid': '2d73ffe8bfff3becf9b641422f0aa176'}, 'aid': 1274104225}], 'coursename': '高等数学B—微积分(一)2022-2023上', 'defaults': {'fid': '7', 'ktoken': '948523e4f02bbead8afe497048a8fef8', 'mtEnc': '548163c6252309d2086531ffb3a3a3b6', 'playingCapture': 1, 'videoAutoPlay': 0, 'userid': '238341800', 'reportTimeInterval': 60, 'endCapture': 0, 'defenc': 'edd946f4c9b993903e6e3f4fbee849ed', 'cardid': 610689214, 'imageUrl': 'https://p.ananas.chaoxing.com/star3/origin/1e8e06d8884895a0065af6a603d38033.jpg', 'state': 0, 'cpi': 264685886, 'captureInterval': 10, 'playAginCapture': 0, 'startCapture': 1, 'isFiled': 0, 'ignoreVideoCtrl': 0, 'reportUrl': 'https://mooc1-api.chaoxing.com/multimedia/log/a/264685886', 'chapterCapture': 0, 'initdataUrl': 'https://mooc1-api.chaoxing.com/richvideo/initdatawithviewer', 'knowledgeid': 657778397, 'videoTopicCloud': 0, 'qnenc': '74c28c3083cbe081537560c22e6ae6db', 'clazzId': 63591612, 'chapterCollectionType': 0, 'lastmodifytime': 1671205888000, 'courseid': 228640141, 'subtitleUrl': 'https://mooc1-api.chaoxing.com/richvideo/subtitle', 'playingLoopCapture': 0}, 'mooc2': 0, 'knowledgename': '历年真题一', 'control': True, 'chapterVideoTranslate': 0, 'isErya': 2}
2022-12-18 14:08:21,250 [PointVideo] INFO -> 不存在任务已忽略
2022-12-18 14:08:21,327 [PointVideo] ERROR -> 预拉取失败
2022-12-18 14:08:21,416 [MainAPI] ERROR -> -----*程序运行异常退出*-----
Traceback (most recent call last):
File "/home/lighthouse/RemoteWorking/CxKitty/cxapi/jobs/video.py", line 73, in pre_fetch
if r := re.search(r'window\.AttachmentSetting *= *(.+?);', html.head.find('script', type='text/javascript').text):
AttributeError: 'NoneType' object has no attribute 'text'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/lighthouse/RemoteWorking/CxKitty/main.py", line 131, in <module>
fuck_task_worker(chap)
File "/home/lighthouse/RemoteWorking/CxKitty/main.py", line 69, in fuck_task_worker
prefetch_status = task_point.pre_fetch()
File "/home/lighthouse/RemoteWorking/CxKitty/cxapi/jobs/video.py", line 89, in pre_fetch
raise RuntimeError('视频预拉取出错')
RuntimeError: 视频预拉取出错
全部日志如下:
您好,可以实习手机刷课吗,以前有个项目可以用termux执行,但是停止维护了
感谢大佬,已经成功封装成exe并且用的很顺手
请问如何实现一次选多个科目或一个科目结束后返回选另一个科目而不是直接退出
docker容器拉取报错
Traceback (most recent call last):
File "/app/main.py", line 41, in
searcher = JsonFileSearcher(
File "/app/searcher.py", line 58, in init
with open(file_path, 'r', encoding='utf8') as fp:
FileNotFoundError: [Errno 2] No such file or directory: 'questions.json'
刷课途中闪退,只能选择下一门新课程,已刷过的仍然闪退,只要发生闪退就只能找新课程刷。
cxkitty_15001122201.log
答题姬有api吗,对接网站的,同步进度
pre_fetch 阶段:
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /root/CxKitty/cxapi/jobs/video.py:97 in pre_fetch │
│ │
│ 94 │ │ │ print(html) │
│ 95 │ │ │ if r := re.search( │
│ 96 │ │ │ │ r"window\.AttachmentSetting *= *(.+?);", │
│ ❱ 97 │ │ │ │ html.head.find("script", type="text/javascript").text, │
│ 98 │ │ │ ): │
│ 99 │ │ │ │ attachment = json.loads(r.group(1)) │
│ 100 │ │ │ else: │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
AttributeError: 'NoneType' object has no attribute 'text'
During handling of the above exception, another exception occurred:
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /root/CxKitty/main.py:129 in <module> │
│ │
│ 126 │ │ classes = api.fetch_classes() # 拉取该账号下所学的课程 │
│ 127 │ │ course_seq = dialog.select_class(console, classes) # 进行课程选择 │
│ 128 │ │ for chapter in course_seq: # 迭代返回课程章节 │
│ ❱ 129 │ │ │ fuck_task_worker(chapter) │
│ 130 │ except Exception as err: │
│ 131 │ │ console.print_exception(show_locals=False) │
│ 132 │ │ api.logger.error("-----*程序运行异常退出*-----", exc_info=True) │
│ │
│ /root/CxKitty/main.py:68 in fuck_task_worker │
│ │
│ 65 │ │ │ │ continue │
│ 66 │ │ │ for task_point in chap.fetch_points_by_index(index): # 获取当前章节的所有任 │
│ 67 │ │ │ │ # 预拉取任务点数据 │
│ ❱ 68 │ │ │ │ prefetch_status = task_point.pre_fetch() │
│ 69 │ │ │ │ if not prefetch_status: │
│ 70 │ │ │ │ │ del task_point │
│ 71 │ │ │ │ │ continue │
│ │
│ /root/CxKitty/cxapi/jobs/video.py:123 in pre_fetch │
│ │
│ 120 │ │ │ return False │
│ 121 │ │ except Exception: │
│ 122 │ │ │ self.logger.error("预拉取失败") │
│ ❱ 123 │ │ │ raise RuntimeError("视频预拉取出错") │
│ 124 │ │
│ 125 │ def fetch(self) -> bool: │
│ 126 │ │ "拉取视频" │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
RuntimeError: 视频预拉取出错
程序运行出现错误, 请截图保存并附上 log 文件在 issue 提交
html 内容如下:
<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no" name="viewport"/>
<meta content="no-cache" http-equiv="pragma"/>
<meta content="no-cache" http-equiv="cache-control"/>
<meta content="0" http-equiv="expires"/>
<meta charset="utf-8"/>
<title>提示页面</title>
<style type="text/css">
*{margin:0;padding:0;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-appearance:none;}
body{font:14px/1.5 微软雅黑;background:#fff;color:#333;}
ul{list-style-type:none;}
input,select,textarea{vertical-align:middle; font:14px 微软雅黑; color:#333;}
a:link,a:hover,a:active,a:visited{text-decoration:none;color:#333;}
table{border-spacing:0px; border-collapse:collapse;width:100%; border:0px;margin:0;padding:0;}
img{border:0px;}
em{font-style:normal;}
.clearfix{overflow:hidden;zoom:1;}
.warn{display:inline-block;width:18px;height:18px;background:url(data:img/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAACIA
AAAiCAYAAAA6RwvCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i7
7u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlID
UuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzI
yLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHht
bG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuM
C8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0iODBFMzI4MzBEODhCM0U2ODNFRTNFNTIwNDVBQ0E5RjUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjU5MTZBRj
RDRUE3MTFFNzg3NzRCQ0EzRTg3RTU5REMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjU5MTZBRjNDRUE3MTFFNzg3NzRCQ0EzRTg3RTU5REMiIHhtcDpDcmVhdG9
yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMjYwN2Q4
Ny0wYWNjLTRkYjEtOTNjMi04M2I5NGMwNzlhYjkiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpjY2IyNmUyZi0wZTYzLTExN2ItYWQzMS05M
jc0ZDNkM2M0NWIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4QaypsAAACKUlEQVR42syYv04CQR
DG904okcZAQYFgqQWFpQRLBV9ALbSk0cpQGCMRYkNr5QPoEyha6tlYkJgQLFEoiF6J0CHizGUuQXLAzcJ5fMkv2YTbmY/b2z+zSqlUEgwFgCSQAFaARWCefvsCakAFeAT
ugU+7gT02n4sDGWBjRJ8FYhXYB7rAHVAAnsYlUMf8HgVuAA3YYhhHzVEfjWJEZY1sAy9ASkyuFMXa4Ro5Ba77xn8awlhXFNuWkWPgTDgnjH0yzggOx7lwXnnKZTlrIsAl
J1ooFBLBYNBo67ouGo0GpzvmegbeB9/IBeDjREITiqIYmIYY8lHOP0OzJjM70IBVmzmb4v1GMsI9HZlGcNnedNEIbhkBlRoeF41g7qRKG5jbWldpF3Vbyypt5W4ronLXD
ofkQyPKDBgxpm9rBny0VHOtl1Gv17NsS6iGRl5le+NGhwYQbE+gCi4mD8CeTG/cbZk77jA9qnTA/Xbx+8DcRTSi09HfLWFu3dxjCnTiZsnv94twOGy06/W6aDabMkYK/c
cArDtuuRHQhNfrNTANMVU0a57+E9rhP68pmOvA6vD8BqQ5kXA4Op2OAbaZSlNOy5ITa5klIGcnEn4T5XJZ5m1kKdfIuiZPDzqlrNUfHVbp4YO7QHuKBtoUM8etffHVxWR
m05DZERscDs5tQJXWlwRV9F1G8h/qk6CyoTqN+xGNCFBQ86IGFw+/+e3iRKKLGo22jg+7rn8FGADyGIf3miWVwQAAAABJRU5ErkJggg==)
no-repeat;background-size:100%;vertical-align:middle;margin-right:5px}
.yzmTips{text-align:center;font-size:15px;width:95%;margin:0 auto;margin-top:40px;color:#666}
.yzmInp{width:64%;height:44px;border:solid 1px #e7e7e7;border-radius:3px;outline:none;padding:0 10px;float:left}
.marTop{margin-top:40px}
.yzmImg{float:right;width:104px;height:44px;border:solid 1px
#e7e7e7;border-radius:3px;overflow:hidden;cursor:pointer}
.submit{width:95%;height:44px;background:#0099ff;color:#fff;line-height:44px;text-align:center;display:block;marg
in:30px auto;border-radius:3px;font-size:14px;border:none;cursor:pointer}
@media screen and (min-width: 700px) {
.yzmTips{margin-top:15%}
.yzmTips,.submit{width:320px}
.submit{font-size:16px;height:36px;line-height:36px}
}
</style>
</head>
<body>
<form action="/html/processVerify.ac" onsubmit="return /[0-9a-zA-Z]{4}/g.test(document.getElementById('ucode').value)">
<div class="yzmTips">
<p>【9010】操作异常,请输入图片中的验证码</p>
<p class="marTop clearfix">
<input name="app" type="hidden" value="0"/>
<input autofocus="" class="yzmInp" id="ucode" maxlength="4" name="ucode" placeholder="输入验证码" type="text"/>
<span class="yzmImg"><img height="44" id="ccc" onclick="this.src='/processVerifyPng.ac?t='+Math.floor(2147483647 *
Math.random())" width="104"/></span>
</p>
</div>
<input class="submit" type="submit" value="提交"/>
</form>
<script>
setTimeout(function(){
document.getElementById("ccc").click();
},1000);
</script>
</body>
</html>
怎么让没有匹配到答案的题随机选一个答案提交
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.