123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- import time
- from sys import argv
- import random
- from pdlearn.pdlearn import version
- from pdlearn.pdlearn import user
- from pdlearn.pdlearn import dingding
- from pdlearn.pdlearn import mydriver
- from pdlearn.pdlearn import score
- from pdlearn.pdlearn import threads
- from pdlearn.pdlearn import get_links
- def user_flag(dd_status, uname):
- if dd_status:
- cookies = dingding.dd_login_status(uname, has_dd=True)
- else:
- if (input("是否保存钉钉帐户密码,保存后可后免登陆学习(Y/N) ")) not in ["y", "Y"]:
- driver_login = mydriver.Mydriver(nohead=False)
- cookies = driver_login.login()
- else:
- cookies = dingding.dd_login_status(uname)
- a_log = user.get_a_log(uname)
- v_log = user.get_v_log(uname)
- return cookies, a_log, v_log
- def get_argv():
- nohead = True
- lock = False
- stime = False
- if len(argv) > 2:
- if argv[2] == "hidden":
- nohead = True
- elif argv[2] == "show":
- nohead = False
- if len(argv) > 3:
- if argv[3] == "single":
- lock = True
- elif argv[3] == "multithread":
- lock = False
- if len(argv) > 4:
- if argv[4].isdigit():
- stime = argv[4]
- return nohead, lock, stime
- def show_score(cookies):
- total, each = score.get_score(cookies)
- print("当前学习总积分:" + str(total))
- print("阅读文章:{}/6,观看视频:{}/6,登陆:{}/1,文章时长:{}/6,视频时长:{}/6".format(*each))
- return total, each
- def article(cookies, a_log, each):
- if each[0] < 6 or each[3] < 8:
- driver_article = mydriver.Mydriver(nohead=nohead)
- driver_article.get_url("https://www.xuexi.cn/notFound.html")
- driver_article.set_cookies(cookies)
- links = get_links.get_article_links()
- try_count = 0
- while True:
- if each[0] < 6 and try_count < 10:
- a_num = 6 - each[0]
- for i in range(a_log, a_log + a_num):
- driver_article.get_url(links[i])
- time.sleep(random.randint(5, 15))
- for j in range(120):
- if random.random() > 0.5:
- driver_article.go_js('window.scrollTo(0, document.body.scrollHeight/120*{})'.format(j))
- print("\r文章学习中,文章剩余{}篇,本篇剩余时间{}秒".format(a_log + a_num - i, 120 - j), end="")
- time.sleep(1)
- driver_article.go_js('window.scrollTo(0, document.body.scrollHeight)')
- total, each = show_score(cookies)
- if each[0] >= 6:
- print("检测到文章数量分数已满,退出学习")
- break
- a_log += a_num
- else:
- with open("./user/{}/a_log".format(uname), "w", encoding="utf8") as fp:
- fp.write(str(a_log))
- break
- try_count = 0
- while True:
- if each[3] < 6 and try_count < 10:
- num_time = 60
- driver_article.get_url(links[a_log-1])
- time.sleep(random.randint(5, 15))
- remaining = (6 - each[3]) * 4 * num_time
- for i in range(remaining):
- if random.random() > 0.5:
- driver_article.go_js(
- 'window.scrollTo(0, document.body.scrollHeight/{}*{})'.format(remaining, i))
- print("\r文章时长学习中,文章总时长剩余{}秒".format(remaining - i), end="")
- time.sleep(1)
- if i % (120) == 0 and i != remaining:
- total, each = show_score(cookies)
- if each[3] >= 6:
- print("检测到文章时长分数已满,退出学习")
- break
- driver_article.go_js('window.scrollTo(0, document.body.scrollHeight)')
- total, each = show_score(cookies)
- else:
- break
- if try_count < 10:
- print("文章学习完成")
- else:
- print("文章学习出现异常,请检查用户名下a_log文件记录数")
- driver_article.quit()
- else:
- print("文章之前学完了")
- def video(cookies, v_log, each):
- if each[1] < 6 or each[4] < 10:
- driver_video = mydriver.Mydriver(nohead=nohead)
- driver_video.get_url("https://www.xuexi.cn/notFound.html")
- driver_video.set_cookies(cookies)
- links = get_links.get_video_links()
- try_count = 0
- while True:
- if each[1] < 6 and try_count < 10:
- v_num = 6 - each[1]
- for i in range(v_log, v_log + v_num):
- driver_video.get_url(links[i])
- time.sleep(random.randint(5, 15))
- for j in range(180):
- if random.random() > 0.5:
- driver_video.go_js('window.scrollTo(0, document.body.scrollHeight/180*{})'.format(j))
- print("\r视频学习中,视频剩余{}个,本次剩余时间{}秒".format(v_log + v_num - i, 180 - j), end="")
- time.sleep(1)
- driver_video.go_js('window.scrollTo(0, document.body.scrollHeight)')
- total, each = show_score(cookies)
- if each[1] >= 6:
- print("检测到视频数量分数已满,退出学习")
- break
- v_log += v_num
- else:
- with open("./user/{}/v_log".format(uname), "w", encoding="utf8") as fp:
- fp.write(str(v_log))
- break
- try_count = 0
- while True:
- if each[4] < 6 and try_count < 10:
- num_time = 60
- driver_video.get_url(links[v_log-1])
- time.sleep(random.randint(5, 15))
- remaining = (6 - each[4]) * 3 * num_time
- for i in range(remaining):
- if random.random() > 0.5:
- driver_video.go_js(
- 'window.scrollTo(0, document.body.scrollHeight/{}*{})'.format(remaining, i))
- print("\r视频学习中,视频总时长剩余{}秒".format(remaining - i), end="")
- time.sleep(1)
- if i % (180) == 0 and i != remaining:
- total, each = show_score(cookies)
- if each[4] >= 6:
- print("检测到视频时长分数已满,退出学习")
- break
- driver_video.go_js('window.scrollTo(0, document.body.scrollHeight)')
- total, each = show_score(cookies)
- else:
- break
- if try_count < 10:
- print("视频学习完成")
- else:
- print("视频学习出现异常,请检查用户名下v_log文件记录数")
- driver_video.quit()
- else:
- print("视频之前学完了")
- if __name__ == '__main__':
- # 0 读取版本信息
- start_time = time.time()
- info_shread = threads.MyThread("获取更新信息...", version.up_info)
- info_shread.start()
- # 1 创建用户标记,区分多个用户历史纪录
- dd_status, uname = user.get_user()
- cookies, a_log, v_log = user_flag(dd_status, uname)
- total, each = show_score(cookies)
- nohead, lock, stime = get_argv()
- article_thread = threads.MyThread("文章学习", article, cookies, a_log, each, lock=lock)
- video_thread = threads.MyThread("视频学习", video, cookies, v_log, each, lock=lock)
- article_thread.start()
- video_thread.start()
- article_thread.join()
- video_thread.join()
- print("总计用时" + str(int(time.time() - start_time) / 60) + "分钟")
- user.shutdown(stime)
|