diff --git a/__pycache__/get_in.cpython-310.pyc b/__pycache__/get_in.cpython-310.pyc
new file mode 100644
index 0000000..081c6af
Binary files /dev/null and b/__pycache__/get_in.cpython-310.pyc differ
diff --git a/__pycache__/get_info.cpython-310.pyc b/__pycache__/get_info.cpython-310.pyc
index 0fb95b6..c0e7691 100644
Binary files a/__pycache__/get_info.cpython-310.pyc and b/__pycache__/get_info.cpython-310.pyc differ
diff --git a/__pycache__/initialization.cpython-310.pyc b/__pycache__/initialization.cpython-310.pyc
new file mode 100644
index 0000000..d7e6c6d
Binary files /dev/null and b/__pycache__/initialization.cpython-310.pyc differ
diff --git a/__pycache__/kill_course.cpython-310.pyc b/__pycache__/kill_course.cpython-310.pyc
index d479e03..0e9fb44 100644
Binary files a/__pycache__/kill_course.cpython-310.pyc and b/__pycache__/kill_course.cpython-310.pyc differ
diff --git a/__pycache__/single_course.cpython-310.pyc b/__pycache__/single_course.cpython-310.pyc
index a3b6f98..b4c882c 100644
Binary files a/__pycache__/single_course.cpython-310.pyc and b/__pycache__/single_course.cpython-310.pyc differ
diff --git a/course_info.json b/course_info.json
index 62ec159..1290d90 100644
--- a/course_info.json
+++ b/course_info.json
@@ -1 +1 @@
-{"6349": {"rate": 100, "type": "\u5fc5\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "7436": {"rate": 100, "type": "\u5fc5\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "7367": {"rate": 100, "type": "\u5fc5\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "7366": {"rate": 100, "type": "\u5fc5\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "7033": {"rate": 100, "type": "\u5fc5\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "7517": {"rate": 100, "type": "\u5fc5\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "7032": {"rate": 100, "type": "\u5fc5\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "7516": {"rate": 100, "type": "\u5fc5\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "7031": {"rate": 100, "type": "\u5fc5\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "7515": {"rate": 100, "type": "\u5fc5\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "6937": {"rate": 100, "type": "\u57f9\u8bad", "status": "\u5df2\u5b66\u5b8c"}, "6938": {"rate": 100, "type": "\u57f9\u8bad", "status": "\u5df2\u5b66\u5b8c"}, "6991": {"rate": 100, "type": "\u57f9\u8bad", "status": "\u5df2\u5b66\u5b8c"}, "6992": {"rate": 100, "type": "\u57f9\u8bad", "status": "\u5df2\u5b66\u5b8c"}, "6993": {"rate": 100, "type": "\u57f9\u8bad", "status": "\u5df2\u5b66\u5b8c"}, "6995": {"rate": 100, "type": "\u57f9\u8bad", "status": "\u5df2\u5b66\u5b8c"}, "7006": {"rate": 100, "type": "\u57f9\u8bad", "status": "\u5df2\u5b66\u5b8c"}, "7007": {"rate": 100, "type": "\u57f9\u8bad", "status": "\u5df2\u5b66\u5b8c"}, "7010": {"rate": 100, "type": "\u57f9\u8bad", "status": "\u5df2\u5b66\u5b8c"}, "7011": {"rate": 100, "type": "\u57f9\u8bad", "status": "\u5df2\u5b66\u5b8c"}, "7554": {"rate": 100, "type": "\u9009\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "7553": {"rate": 100, "type": "\u9009\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "7552": {"rate": 100, "type": "\u9009\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "7551": {"rate": 100, "type": "\u9009\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "7550": {"rate": 100, "type": "\u9009\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "7549": {"rate": 100, "type": "\u9009\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "7548": {"rate": 100, "type": "\u9009\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "7547": {"rate": 100, "type": "\u9009\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "7546": {"rate": 100, "type": "\u9009\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "7545": {"rate": 100, "type": "\u9009\u4fee", "status": "\u5df2\u5b66\u5b8c"}, "7564": {"rate": 100, "type": "\u9009\u4fee", "status": "\u5df2\u5b66\u5b8c"}}
\ No newline at end of file
+{"7033": {"name": "\u300a\u5171\u4ea7\u515a\u5ba3\u8a00\u300b\u7684\u65b0\u65f6\u4ee3\u9610\u8ff0", "type": "\u5fc5\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7517": {"name": "\u4ee5\u4e2d\u56fd\u5f0f\u73b0\u4ee3\u5316\u5168\u9762\u63a8\u8fdb\u4e2d\u534e\u6c11\u65cf\u4f1f\u5927\u590d\u5174", "type": "\u5fc5\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7032": {"name": "\u5927\u56fd\u535a\u5f08\u8c01\u80fd\u7b11\u5230\u6700\u540e", "type": "\u5fc5\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7516": {"name": "\u4e60\u8fd1\u5e73\u603b\u4e66\u8bb0\u5173\u4e8e\u575a\u6301\u548c\u52a0\u5f3a\u515a\u7684\u5168\u9762\u9886\u5bfc\u91cd\u8981\u8bba\u8ff0", "type": "\u5fc5\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7031": {"name": "\u5168\u7403\u7f51\u7edc\u7a7a\u95f4\u600e\u4e48\u7ba1", "type": "\u5fc5\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7515": {"name": "\u4e60\u8fd1\u5e73\u65b0\u65f6\u4ee3\u4e2d\u56fd\u7279\u8272\u793e\u4f1a\u4e3b\u4e49\u601d\u60f3\u7684\u4e16\u754c\u89c2\u548c\u65b9\u6cd5\u8bba", "type": "\u5fc5\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "6349": {"name": "\u6d3b\u7684\u9a6c\u514b\u601d\u4e3b\u4e49", "type": "\u5fc5\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7436": {"name": "\u4e60\u8fd1\u5e73\u603b\u4e66\u8bb0\u5173\u4e8e\u9752\u5e74\u5de5\u4f5c\u7684\u91cd\u8981\u601d\u60f3\u6982\u8bba", "type": "\u5fc5\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7367": {"name": "\u4e3a\u4ec0\u4e48\u8981\u6df1\u5165\u6279\u5224\u5386\u53f2\u865a\u65e0\u4e3b\u4e49\uff1f", "type": "\u5fc5\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7366": {"name": "\u793e\u4f1a\u4e3b\u4e49\u6838\u5fc3\u4ef7\u503c\u89c2\u4e0e\u9752\u5e74", "type": "\u5fc5\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "6937": {"name": "\u589e\u5f3a\u56db\u529b\u6253\u9020\u8fc7\u786c\u5ba3\u4f20\u601d\u60f3\u5de5\u4f5c\u961f\u4f0d\uff08\u4e0a\uff09", "type": "\u57f9\u8bad", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "6938": {"name": "\u589e\u5f3a\u56db\u529b\u6253\u9020\u8fc7\u786c\u5ba3\u4f20\u601d\u60f3\u5de5\u4f5c\u961f\u4f0d\uff08\u4e0b\uff09", "type": "\u57f9\u8bad", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "6991": {"name": "\u201c\u4e92\u8054\u7f51\uff0b\u201d\u80cc\u666f\u4e0b\u5386\u53f2\u865a\u65e0\u4e3b\u4e49\u7684\u5371\u5bb3\u53ca\u5e94\u5bf9\uff08\u4e0a\u3001\u4e0b\uff09", "type": "\u57f9\u8bad", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "6992": {"name": "\u5168\u7403\u4f20\u64ad\u65f6\u4ee3\u7684\u7f51\u7edc\u6587\u5316\u4e0e\u610f\u8bc6\u5f62\u6001", "type": "\u57f9\u8bad", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "6993": {"name": "\u300a\u4e2d\u534e\u4eba\u6c11\u5171\u548c\u56fd\u7f51\u7edc\u5b89\u5168\u6cd5\u300b\u89e3\u8bfb", "type": "\u57f9\u8bad", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "6995": {"name": "\u7f51\u7edc\u4e92\u8054\u65f6\u4ee3\u4e0e\u5fc3\u7406\u5065\u5eb7\u4fc3\u8fdb", "type": "\u57f9\u8bad", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7006": {"name": "\u7f51\u7edc\u66b4\u529b\u7814\u7a76\uff08\u4e0a\u3001\u4e0b\uff09", "type": "\u57f9\u8bad", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7007": {"name": "\u8425\u9020\u98ce\u6e05\u6c14\u6b63\u7684\u7f51\u7edc\u7a7a\u95f4\uff08\u4e0a\u3001\u4e0b\uff09", "type": "\u57f9\u8bad", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7010": {"name": "\u8c03\u8282\u60c5\u7eea\u7684\u6709\u6548\u65b9\u6cd5\uff08\u4e0a\u3001\u4e2d\u3001\u4e0b\uff09", "type": "\u57f9\u8bad", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7011": {"name": "\u7528\u6838\u5fc3\u4ef7\u503c\u89c2\u5f15\u9886\u7f51\u7edc\u6587\u5316\u5efa\u8bbe\uff08\u4e0a\u3001\u4e0b\uff09", "type": "\u57f9\u8bad", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7554": {"name": "\u300a\u4e60\u8fd1\u5e73\u8c08\u6cbb\u56fd\u7406\u653f\u300b\u7b2c\u56db\u5377\uff1a\u771f\u6293\u5b9e\u5e72\u505a\u597d\u65b0\u53d1\u5c55\u9636\u6bb5\u201c\u4e09\u519c\u201d\u5de5\u4f5c", "type": "\u9009\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7553": {"name": "\u300a\u4e60\u8fd1\u5e73\u8c08\u6cbb\u56fd\u7406\u653f\u300b\u7b2c\u56db\u5377\uff1a\u52aa\u529b\u5b9e\u73b0\u9ad8\u6c34\u5e73\u79d1\u6280\u81ea\u7acb\u81ea\u5f3a", "type": "\u9009\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7552": {"name": "\u300a\u4e60\u8fd1\u5e73\u8c08\u6cbb\u56fd\u7406\u653f\u300b\u7b2c\u56db\u5377\uff1a\u6df1\u5165\u8d2f\u5f7b\u65b0\u53d1\u5c55\u7406\u5ff5", "type": "\u9009\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7551": {"name": "\u300a\u4e60\u8fd1\u5e73\u8c08\u6cbb\u56fd\u7406\u653f\u300b\u7b2c\u56db\u5377\uff1a\u51c6\u786e\u628a\u63e1\u65b0\u53d1\u5c55\u9636\u6bb5", "type": "\u9009\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7550": {"name": "\u300a\u4e60\u8fd1\u5e73\u8c08\u6cbb\u56fd\u7406\u653f\u300b\u7b2c\u56db\u5377\uff1a\u6784\u5efa\u65b0\u53d1\u5c55\u683c\u5c40\u8981\u628a\u63e1\u597d\u51e0\u4e2a\u91cd\u8981\u7740\u529b\u70b9", "type": "\u9009\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7549": {"name": "\u300a\u4e60\u8fd1\u5e73\u8c08\u6cbb\u56fd\u7406\u653f\u300b\u7b2c\u56db\u5377\uff1a\u4ee5\u65b0\u53d1\u5c55\u683c\u5c40\u91cd\u5851\u65b0\u7ade\u4e89\u4f18\u52bf", "type": "\u9009\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7548": {"name": "\u300a\u4e60\u8fd1\u5e73\u8c08\u6cbb\u56fd\u7406\u653f\u300b\u7b2c\u56db\u5377\uff1a\u52a0\u5feb\u6784\u5efa\u65b0\u53d1\u5c55\u683c\u5c40", "type": "\u9009\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7547": {"name": "\u300a\u4e60\u8fd1\u5e73\u8c08\u6cbb\u56fd\u7406\u653f\u300b\u7b2c\u56db\u5377\uff1a\u5411\u7b2c\u4e8c\u4e2a\u767e\u5e74\u594b\u6597\u76ee\u6807\u8fdb\u519b", "type": "\u9009\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7546": {"name": "\u300a\u4e60\u8fd1\u5e73\u8c08\u6cbb\u56fd\u7406\u653f\u300b\u7b2c\u56db\u5377\uff1a\u59cb\u7ec8\u575a\u6301\u4eba\u6c11\u81f3\u4e0a", "type": "\u9009\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7545": {"name": "\u300a\u4e60\u8fd1\u5e73\u8c08\u6cbb\u56fd\u7406\u653f\u300b\u7b2c\u56db\u5377\uff1a\u575a\u6301\u548c\u52a0\u5f3a\u515a\u7684\u5168\u9762\u9886\u5bfc", "type": "\u9009\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7564": {"name": "\u300a\u4e60\u8fd1\u5e73\u8c08\u6cbb\u56fd\u7406\u653f\u300b\u7b2c\u56db\u5377\uff1a\u63a8\u52a8\u201c\u4e00\u5e26\u4e00\u8def\u201d\u5efa\u8bbe\u9ad8\u8d28\u91cf\u53d1\u5c55", "type": "\u9009\u4fee", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7494": {"name": "\u5b66\u4e60\u8d2f\u5f7b\u515a\u7684\u4e8c\u5341\u5927\u7cbe\u795e\u7cfb\u5217\u4e4b\u5341\u4e94\uff1a\u4e3a\u4ec0\u4e48\u8981\u575a\u6301\u63a8\u52a8\u6784\u5efa\u4eba\u7c7b\u547d\u8fd0\u5171\u540c\u4f53", "type": "\u4e13\u9898", "rate": 100, "status": "\u5df2\u5b66\u5b8c"}, "7493": {"name": "\u5b66\u4e60\u8d2f\u5f7b\u515a\u7684\u4e8c\u5341\u5927\u7cbe\u795e\u7cfb\u5217\u4e4b\u5341\u56db\uff1a\u575a\u6301\u548c\u5b8c\u5584\u201c\u4e00\u56fd\u4e24\u5236\u201d \u63a8\u8fdb\u7956\u56fd\u7edf\u4e00", "type": "\u4e13\u9898", "rate": 0, "status": "\u672a\u5b66\u5b8c"}, "6567": {"name": "4.\u6c38\u4e0d\u51cb\u8c22\u7684\u5170\u82b1", "type": "\u9009\u4fee", "rate": 0, "status": "\u672a\u5b66\u5b8c"}, "7565": {"name": "\u300a\u4e60\u8fd1\u5e73\u8c08\u6cbb\u56fd\u7406\u653f\u300b\u7b2c\u56db\u5377\uff1a\u4ee5\u4f1f\u5927\u81ea\u6211\u9769\u547d\u5f15\u9886\u4f1f\u5927\u793e\u4f1a\u9769\u547d", "type": "\u9009\u4fee", "rate": 32, "status": "\u672a\u5b66\u5b8c"}, "7492": {"name": "\u5b66\u4e60\u8d2f\u5f7b\u515a\u7684\u4e8c\u5341\u5927\u7cbe\u795e\u7cfb\u5217\u4e4b\u5341\u4e09\uff1a\u5f00\u521b\u56fd\u9632\u548c\u519b\u961f\u73b0\u4ee3\u5316\u65b0\u5c40\u9762", "type": "\u4e13\u9898", "rate": 0, "status": "\u672a\u5b66\u5b8c"}, "6193": {"name": "\u9a6c\u514b\u601d\u4e3b\u4e49\u54f2\u5b66\u7684\u57fa\u672c\u89c2\u70b9\u4e0e\u65b9\u6cd5\uff08\u4e0a\u3001\u4e0b\uff09", "type": "\u9009\u4fee", "rate": 0, "status": "\u672a\u5b66\u5b8c"}, "7536": {"name": "\u5173\u4e8e\u515a\u7684\u5386\u53f2\u7684\u91cd\u8981\u8bba\u8ff0\u4e4b\u516b\uff1a\u4e2d\u56fd\u5171\u4ea7\u515a\u7684\u4f1f\u5927\u7cbe\u795e\u6c38\u4e0d\u8fc7\u65f6", "type": "\u9009\u4fee", "rate": 0, "status": "\u672a\u5b66\u5b8c"}, "7563": {"name": "\u300a\u4e60\u8fd1\u5e73\u8c08\u6cbb\u56fd\u7406\u653f\u300b\u7b2c\u56db\u5377\uff1a\u63a8\u52a8\u6784\u5efa\u4eba\u7c7b\u547d\u8fd0\u5171\u540c\u4f53", "type": "\u9009\u4fee", "rate": 0, "status": "\u672a\u5b66\u5b8c"}, "7561": {"name": "\u300a\u4e60\u8fd1\u5e73\u8c08\u6cbb\u56fd\u7406\u653f\u300b\u7b2c\u56db\u5377\uff1a\u5c55\u793a\u4e2d\u56fd\u6587\u827a\u65b0\u6c14\u8c61 \u94f8\u5c31\u4e2d\u534e\u6587\u5316\u65b0\u8f89\u714c", "type": "\u9009\u4fee", "rate": 0, "status": "\u672a\u5b66\u5b8c"}, "7562": {"name": "\u300a\u4e60\u8fd1\u5e73\u8c08\u6cbb\u56fd\u7406\u653f\u300b\u7b2c\u56db\u5377\uff1a\u575a\u6301\u8d70\u4e2d\u56fd\u7279\u8272\u5f3a\u519b\u4e4b\u8def", "type": "\u9009\u4fee", "rate": 0, "status": "\u672a\u5b66\u5b8c"}, "7560": {"name": "\u300a\u4e60\u8fd1\u5e73\u8c08\u6cbb\u56fd\u7406\u653f\u300b\u7b2c\u56db\u5377\uff1a\u5982\u4f55\u505a\u597d\u65b0\u65f6\u4ee3\u515a\u7684\u6c11\u65cf\u5de5\u4f5c", "type": "\u9009\u4fee", "rate": 0, "status": "\u672a\u5b66\u5b8c"}, "7491": {"name": "\u5b66\u4e60\u8d2f\u5f7b\u515a\u7684\u4e8c\u5341\u5927\u7cbe\u795e\u7cfb\u5217\u4e4b\u5341\u4e03\uff1a\u5982\u4f55\u7406\u89e3\u201c\u4e94\u4e2a\u7262\u7262\u628a\u63e1\u201d", "type": "\u4e13\u9898", "rate": 0, "status": "\u672a\u5b66\u5b8c"}, "7490": {"name": "\u5b66\u4e60\u8d2f\u5f7b\u515a\u7684\u4e8c\u5341\u5927\u7cbe\u795e\u7cfb\u5217\u4e4b\u5341\u516d\uff1a\u6df1\u5165\u63a8\u8fdb\u65b0\u65f6\u4ee3\u515a\u7684\u5efa\u8bbe\u65b0\u7684\u4f1f\u5927\u5de5\u7a0b", "type": "\u4e13\u9898", "rate": 0, "status": "\u672a\u5b66\u5b8c"}, "7489": {"name": "\u5b66\u4e60\u8d2f\u5f7b\u515a\u7684\u4e8c\u5341\u5927\u7cbe\u795e\u7cfb\u5217\u4e4b\u5341\u4e5d\uff1a\u515a\u7684\u4e8c\u5341\u5927\u62a5\u544a\u4e2d\u7684\u65b0\u8868\u8ff0\u65b0\u6982\u62ec\u65b0\u8bba\u65ad", "type": "\u4e13\u9898", "rate": 0, "status": "\u672a\u5b66\u5b8c"}, "7488": {"name": "\u5b66\u4e60\u8d2f\u5f7b\u515a\u7684\u4e8c\u5341\u5927\u7cbe\u795e\u7cfb\u5217\u4e4b\u5341\u516b\uff1a\u515a\u7684\u4e8c\u5341\u5927\u62a5\u544a\u4e2d\u7684\u9ad8\u9891\u8bcd\u6c47", "type": "\u4e13\u9898", "rate": 0, "status": "\u672a\u5b66\u5b8c"}}
\ No newline at end of file
diff --git a/demo.py b/demo.py
index 38451ce..8038806 100644
--- a/demo.py
+++ b/demo.py
@@ -1,20 +1,10 @@
-from DrissionPage import ChromiumPage
-from DrissionPage.common import *
-from loguru import logger
-import subprocess
-from get_info import login
-# page = ChromiumPage()
-# page.get('http://hnqmgc.17el.cn/')
-# try:
-# if page.ele('@onclick=cha()',timeout=3):
-# page.ele('@onclick=cha()').click()
-# #
-# elif page.ele('tag:img@@style=width: 25px;height: 25px;',timeout=3):
-# page.ele('tag:img@@style=width: 25px;height: 25px;').click()
-# except BaseException:
-# logger.error('不能进入课程页面')
-# subprocess.run(["python", __file__])
-# exit()
-# page.ele('tag:a@@text():青马课堂').hover()
-# page.ele('tag:a@@text():全部').click().for_new_tab()
-login(first=True,init=True)
\ No newline at end of file
+import json
+dic = json.load(open('course_info.json', 'r'))
+l1 = [ i for i in dic.keys() if dic[i]['type'] == '选修' ]
+l2 = [ i for i in dic.keys() if dic[i]['type'] == '必修' ]
+l3 = [ i for i in dic.keys() if dic[i]['type'] == '专题' ]
+l4 = [ i for i in dic.keys() if dic[i]['type'] == '培训' ]
+print(len(l1))
+print(len(l2))
+print(len(l3))
+print(len(l4))
\ No newline at end of file
diff --git a/file.log b/file.log
deleted file mode 100644
index bb1db5f..0000000
--- a/file.log
+++ /dev/null
@@ -1 +0,0 @@
-2024-03-10T12:13:35.955107+0800 DEBUG 这是一条具有自定义格式的日志信息
diff --git a/get_in.py b/get_in.py
new file mode 100644
index 0000000..da919f6
--- /dev/null
+++ b/get_in.py
@@ -0,0 +1,70 @@
+import tkinter as tk
+from tkinter import ttk
+import json
+
+
+def create_login_window():
+ # 创建主窗口
+ root = tk.Tk()
+ root.title("Integrated Window")
+
+ # 设置窗口的初始大小并居中显示
+ window_width = 600
+ window_height = 400
+ screen_width = root.winfo_screenwidth()
+ screen_height = root.winfo_screenheight()
+ center_x = int(screen_width / 2 - window_width / 2)
+ center_y = int(screen_height / 2 - window_height / 2)
+ root.geometry(f"{window_width}x{window_height}+{center_x}+{center_y}")
+
+ # 用户名和密码变量
+ username_var = tk.StringVar()
+ password_var = tk.StringVar()
+
+ # 下拉选择框的选项
+ options = ['网络文明志愿者', '团学干部', '大学生心理健康教育', '入党积极分子']
+
+ # 创建下拉选择框
+ combo_label = tk.Label(root, text="选择学习类型", font=('Helvetica', 12))
+ combo_label.pack(pady=(10, 5))
+
+ combo = ttk.Combobox(root, values=options, width=15, state="readonly")
+ combo.pack(pady=(0, 20)) # pady增加垂直外边距,有助于在窗口中垂直居中
+
+ # 创建用户名和密码的标签和输入框
+ username_label = tk.Label(root, text="账号", font=('Helvetica', 12))
+ username_label.pack(pady=(5, 5))
+
+ username_entry = tk.Entry(
+ root, textvariable=username_var, font=('Helvetica', 12))
+ username_entry.pack(pady=(0, 10))
+
+ password_label = tk.Label(root, text="密码", font=('Helvetica', 12))
+ password_label.pack(pady=(5, 5))
+
+ password_entry = tk.Entry(
+ root, textvariable=password_var, font=('Helvetica', 12), show="*")
+ password_entry.pack(pady=(0, 20))
+
+ # 确定按钮的事件处理函数
+ def submit_action():
+ username = username_var.get().upper()
+ password = password_var.get()
+ study_type = combo.get()
+ if study_type not in options:
+ return
+ with open('info.json', 'w') as f:
+ json.dump({'username': username, 'password': password,
+ 'study_type': study_type}, f)
+ root.destroy()
+
+ submit_button = tk.Button(root, text="提交", command=submit_action)
+ submit_button.pack(pady=(10, 0))
+
+ # 运行主循环
+ root.mainloop()
+
+
+# 调用函数以创建和显示登录窗口
+if __name__ == "__main__":
+ create_login_window()
diff --git a/get_info.py b/get_info.py
index 96fdd42..6b0ff96 100644
--- a/get_info.py
+++ b/get_info.py
@@ -1,4 +1,4 @@
-from DrissionPage import ChromiumPage,ChromiumOptions
+from DrissionPage import ChromiumPage, ChromiumOptions
from DrissionPage.common import *
from collections import *
import time
@@ -6,47 +6,53 @@ import json
from loguru import logger
import subprocess
from typing import *
+from get_in import create_login_window
# http://hnqmgc.17el.cn/grzx/
# 单独实现登录操作
-def get_into_center(cpage:ChromiumPage):
- cpage.ele('#login_btn').click()
- cpage.ele('@value=进入个人中心').click()
-def login(first:bool=True,init:bool=False):
+
+
+def get_into_center(cpage: ChromiumPage):
+ cpage.ele('#login_btn').click()
+ cpage.ele('@value=进入个人中心').click()
+
+
+def login(first: bool = True, init: bool = False, username: str = None, pwd: str = None):
if not first:
return
# 先检查当前页面是否已经登录
page = ChromiumPage()
try:
- if page.ele('tag:div@@text():欢迎您,',timeout=3):
+ if page.ele('tag:div@@text():欢迎您,', timeout=3):
logger.info('当前页面已登录')
return
except BaseException:
logger.info('准备登录')
if first:
try:
- page.get('http://hnqmgc.17el.cn/grzx/',retry=5,timeout=5,interval=1)
+ page.get('http://hnqmgc.17el.cn/grzx/',
+ retry=5, timeout=5, interval=1)
except BaseException:
logger.error('网络连接失败')
# 定位到账号文本框,获取文本框元素
- ele = page.ele('#userName') # #的意思是通过id定位元素
+ ele = page.ele('#userName') # 的意思是通过id定位元素
# 输入对文本框输入账号
- ele.input('51140220050507901X')
+ ele.input(username)
# 定位到密码文本框并输入密码
- page.ele('#password').input('hnqm123456')
+ page.ele('#password').input(pwd)
# 定位到验证码文本框并输入验证码
- inpcode = page.ele('#yzcode').text # 湖南青马太可爱了吧,验证码居然直接放在页面源码里:)
+ inpcode = page.ele('#yzcode').text # 湖南青马太可爱了吧,验证码居然直接放在页面源码里:)
page.ele('#inpcode').input(inpcode)
# 点击登录按钮
page.ele('#btnLogin').click()
page.wait.new_tab(3)
# 进入课程页面
try:
- if page.ele('@onclick=cha()',timeout=3):
+ if page.ele('@onclick=cha()', timeout=3):
page.ele('@onclick=cha()').click()
#
- elif page.ele('tag:img@@style=width: 25px;height: 25px;',timeout=3):
+ elif page.ele('tag:img@@style=width: 25px;height: 25px;', timeout=3):
page.ele('tag:img@@style=width: 25px;height: 25px;').click()
except BaseException:
logger.error('不能进入课程页面')
@@ -54,24 +60,30 @@ def login(first:bool=True,init:bool=False):
exit()
if not init:
get_into_center(page)
-def get_info(first:bool=True):
+
+
+def get_info(first: bool = True):
# 创建页面对象,并启动或接管浏览器
page = ChromiumPage()
+ try:
+ info = json.load(open('info.json', 'r'))
+ except BaseException:
+ create_login_window()
+ info = json.load(open('info.json', 'r'))
+ username = info['username']
+ pwd = info['password']
# 登录
- login(first)
+ login(first, init=False, username=username, pwd=pwd)
# 提取课程信息
time.sleep(2)
if not first:
page.refresh()
time.sleep(2)
- page.ele('@value=0',timeout=3).click()
+ page.ele('@value=0', timeout=3).click()
# 获取总页数
course_info = {}
- #