重构,精简相关代码,更新ddddocr

This commit is contained in:
Anyexyz 2023-12-18 12:09:45 +00:00
parent c82d11ff4b
commit 610a6cd329
3 changed files with 619 additions and 598 deletions

View File

@ -1,29 +1,21 @@
import json import json
import re import re
import time import time
import traceback
import requests import requests
from utility import encrypt, cap_recognize from utility import encrypt, cap_recognize
def study(username,password):
# 返回1:成功
def study(username, password, ua): # 返回0:失败
# return 1:success;0:fail
url = ''
tryTime = 0 tryTime = 0
url = ''
while tryTime < 4: while tryTime < 4:
try: try:
bjySession = requests.session() bjySession = requests.session() # 创建会话
bjySession.timeout = 5 # set session timeout bjySession.timeout = 5 # 设置会话超时
bjySession.headers.update({"User-Agent": ua, }) bjySession.headers.update({"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', })
touch = bjySession.get(url="https://m.bjyouth.net/site/login") touch = bjySession.get(url="https://m.bjyouth.net/site/login")
capUrl = "https://m.bjyouth.net" + re.findall( capUrl = "https://m.bjyouth.net" + re.findall(r'src="(/site/captcha.+)" alt=', touch.text)[0]
r'src="(/site/captcha.+)" alt=', touch.text)[0]
if "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD5uIDebA2qU746e/NVPiQSBA0Q" not in touch.text:
print("记录的公钥没有出现")
capText = cap_recognize(bjySession.get(url=capUrl).content) capText = cap_recognize(bjySession.get(url=capUrl).content)
# print(f'验证码识别: {capText}')
login_r = bjySession.post('https://m.bjyouth.net/site/login', login_r = bjySession.post('https://m.bjyouth.net/site/login',
data={ data={
'_csrf_mobile': bjySession.cookies.get_dict()['_csrf_mobile'], '_csrf_mobile': bjySession.cookies.get_dict()['_csrf_mobile'],
@ -31,7 +23,6 @@ def study(username, password, ua):
'Login[username]': encrypt(username), 'Login[username]': encrypt(username),
'Login[verifyCode]': capText 'Login[verifyCode]': capText
}) })
if login_r.text == '8': if login_r.text == '8':
print('Login:识别的验证码错误') print('Login:识别的验证码错误')
continue continue
@ -40,9 +31,9 @@ def study(username, password, ua):
raise Exception('Login:账号密码错误') raise Exception('Login:账号密码错误')
print('登录成功') print('登录成功')
r = json.loads(bjySession.get("https://m.bjyouth.net/dxx/course").text) r = json.loads(bjySession.get("https://m.bjyouth.net/dxx/course").text)
# "rize" LOL
if 'newCourse' not in r: if 'newCourse' not in r:
print(r) print(r)
# newCourse滞后于course中的课程所以这里用course中的最新课程
url = r['data']['data'][0]['url'] url = r['data']['data'][0]['url']
title = r['data']['data'][0]['title'] title = r['data']['data'][0]['title']
courseId = r['data']['data'][0]['id'] courseId = r['data']['data'][0]['id']
@ -50,51 +41,38 @@ def study(username, password, ua):
except: except:
time.sleep(3) time.sleep(3)
tryTime += 1 tryTime += 1
print(traceback.format_exc())
if not url: if not url:
print('登入失败,退出') print('登入失败,退出')
return 0 return 0
orgIdTemp = '' info = bjySession.get('https://m.bjyouth.net/dxx/my').json()['data']
orgPattern = re.compile(r'\(|\s*(\d+)\s*|\)') # 组织id应该是被括号包的 name = info['name'].split('(')[0]
learnedInfo = 'https://m.bjyouth.net/dxx/my-study?page=1&limit=15&year=' + time.strftime("%Y", time.localtime()) org = info['org'].split('(')[0]
haveLearned = bjySession.get(learnedInfo).json() print(f'当前用户: {name} {org}')
orgID = ""
try:
orgIdTemp = orgPattern.search(haveLearned['data'][0]['orgname'])
orgID = orgIdTemp.group(1)
except:
print('获取组织id-2')
orgIdTemp = orgPattern.search(bjySession.get('https://m.bjyouth.net/dxx/my').json()['data']['org'])
if orgIdTemp:
orgID = orgIdTemp.group(1)
if not orgID:
orgID = '172442'
print(f"无法获取orgID")
nOrgID = int(bjySession.get('https://m.bjyouth.net/dxx/is-league').text) nOrgID = int(bjySession.get('https://m.bjyouth.net/dxx/is-league').text)
learnedInfo = 'https://m.bjyouth.net/dxx/my-study?page=1&limit=15&year=' + time.strftime("%Y", time.localtime())
haveLearned = bjySession.get(learnedInfo).json()
if f"学习课程:《{title}" in list(map(lambda x: x['text'], haveLearned['data'])): if f"学习课程:《{title}" in list(map(lambda x: x['text'], haveLearned['data'])):
print(f'{title} 在运行前已完成,退出') print(f'{title} 在运行前已完成,退出')
return 1 return 1
study_url = f"https://m.bjyouth.net/dxx/check" study_url = f"https://m.bjyouth.net/dxx/check"
r = bjySession.post(study_url, json={"id": str(courseId), "org_id": int(nOrgID)}) # payload r = bjySession.post(study_url, json={"id": str(courseId), "org_id": int(nOrgID)}) # payload
if r.text: if r.text:
print(f'Unexpected response: {r.text}') print(f'开始学习{title}')
return 0 return 0
haveLearned = bjySession.get(learnedInfo).json() haveLearned = bjySession.get(learnedInfo).json()
if int(orgID) != nOrgID:
raise Exception('组织id不匹配如果看到这个请开个issue说下')
if f"学习课程:《{title}" in list(map(lambda x: x['text'], haveLearned['data'])): if f"学习课程:《{title}" in list(map(lambda x: x['text'], haveLearned['data'])):
print(f'{title} 成功完成学习') print(f'{title} 成功完成学习')
return 1 return 1
else: else:
print(f'完成{title}, 但未在检查中确认') print(f'完成{title}, 但未在已学习列表中找到, 请手动检查')
return 0 return 0
if __name__ == '__main__':
study('16634486740','Anye20031003')

1127
ddddocr.py

File diff suppressed because it is too large Load Diff

24
main.py
View File

@ -1,24 +0,0 @@
import os
import time
import sys
from study import study
ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
accounts=[('*********', '*********')]
print(f'账号数量:{len(accounts)}')
successful = 0
count = 0
for username, password in accounts:
if username=='********':
continue
count += 1
print(f'--User {count}--')
if study(username, password, ua):
successful += 1
failed = count - successful
print('--Summary--')
print(f'成功:{successful},失败:{failed}')
if failed != 0:
raise Exception(f'{failed}个失败!')