|
|
|
|
import requests
|
|
|
|
|
import json
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 随手写的 目前只针对2024版
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_tenantCode(schoolName):
|
|
|
|
|
url = 'https://weiban.mycourse.cn/pharos/login/getTenantListWithLetter.do?timestamp=1713318535.868'
|
|
|
|
|
|
|
|
|
|
headers = {
|
|
|
|
|
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.139 Safari/537.36',
|
|
|
|
|
'x-token': f'{x_token}'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
schoolList = []
|
|
|
|
|
Code = ''
|
|
|
|
|
|
|
|
|
|
r = requests.post(url, headers=headers)
|
|
|
|
|
data = json.loads(r.text)['data']
|
|
|
|
|
for i in data:
|
|
|
|
|
l = i['list']
|
|
|
|
|
schoolList = schoolList + l
|
|
|
|
|
for school in schoolList:
|
|
|
|
|
if school['name'] == schoolName:
|
|
|
|
|
Code = school['code']
|
|
|
|
|
break
|
|
|
|
|
return Code
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 懒得写了 F12吧 后续有时间再完善
|
|
|
|
|
# def get_userID_token():
|
|
|
|
|
# url = 'https://weiban.mycourse.cn/pharos/login/login.do?timestamp=1713319251.071'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 获取已完成考试题目答案
|
|
|
|
|
def get_questions_answers():
|
|
|
|
|
url = 'https://weiban.mycourse.cn/pharos/exam/reviewPaper.do'
|
|
|
|
|
data = {
|
|
|
|
|
'tenantCode': f'{tenantCode}',
|
|
|
|
|
'userId': f'{userId}',
|
|
|
|
|
'userExamId': f'{userExamId}',
|
|
|
|
|
'isRetake': 2
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
r = requests.post(url, data=data, headers=headers)
|
|
|
|
|
|
|
|
|
|
content = json.loads(r.text)['data']['questions']
|
|
|
|
|
|
|
|
|
|
questions_answers = {}
|
|
|
|
|
|
|
|
|
|
for question in content:
|
|
|
|
|
answers = []
|
|
|
|
|
optionList = question['optionList']
|
|
|
|
|
for i in optionList:
|
|
|
|
|
if i['isCorrect'] == 1:
|
|
|
|
|
answers.append(i['content'])
|
|
|
|
|
questions_answers[question['title']] = answers
|
|
|
|
|
|
|
|
|
|
return questions_answers
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 获取当前考试题目列表
|
|
|
|
|
def get_questions_List():
|
|
|
|
|
url = 'https://weiban.mycourse.cn/pharos/exam/startPaper.do'
|
|
|
|
|
data = {
|
|
|
|
|
'tenantCode': f'{tenantCode}',
|
|
|
|
|
'userId': f'{userId}',
|
|
|
|
|
'userExamPlanId': f'{userExamPlanId}'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
r = requests.post(url, data=data, headers=headers)
|
|
|
|
|
|
|
|
|
|
content = json.loads(r.text)['data']['questionList']
|
|
|
|
|
|
|
|
|
|
questions = {}
|
|
|
|
|
|
|
|
|
|
for question in content:
|
|
|
|
|
key = (question['id'], question['title'])
|
|
|
|
|
optionList = question['optionList']
|
|
|
|
|
answers = []
|
|
|
|
|
for i in optionList:
|
|
|
|
|
id,content = i['id'],i['content']
|
|
|
|
|
answers.append((id,content))
|
|
|
|
|
questions[key] = answers
|
|
|
|
|
|
|
|
|
|
return questions
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 答题
|
|
|
|
|
def recordQuestion(questionId, answerIds):
|
|
|
|
|
url = 'https://weiban.mycourse.cn/pharos/exam/recordQuestion.do?timestamp=1713258614.138'
|
|
|
|
|
|
|
|
|
|
data = {
|
|
|
|
|
'tenantCode': f'{tenantCode}',
|
|
|
|
|
'userId': f'{userId}',
|
|
|
|
|
'userExamPlanId': f'{userExamPlanId}',
|
|
|
|
|
|
|
|
|
|
'questionId': f'{questionId}',
|
|
|
|
|
'useTime': 3600,
|
|
|
|
|
'answerIds': f'{answerIds}',
|
|
|
|
|
|
|
|
|
|
'examPlanId': f'{examPlanId}'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
r = requests.post(url, data=data, headers=headers)
|
|
|
|
|
content = json.loads(r.text)
|
|
|
|
|
print(content)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 提交
|
|
|
|
|
def submit():
|
|
|
|
|
url = 'https://weiban.mycourse.cn/pharos/exam/submitPaper.do?timestamp=1713262229.987'
|
|
|
|
|
data = {
|
|
|
|
|
'tenantCode': f'{tenantCode}',
|
|
|
|
|
'userId': f'{userId}',
|
|
|
|
|
'userExamPlanId': f'{userExamPlanId}'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
r = requests.post(url, data=data, headers=headers)
|
|
|
|
|
content = json.loads(r.text)
|
|
|
|
|
print(content)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
# 运行之前一定填写好下面的参数
|
|
|
|
|
userId = 'eec6b514-93d6-4516-9e6a-e45cc3ce980c' # 用户ID
|
|
|
|
|
x_token = '57ba12f6-8ef6-4d62-8103-cb97a1bd4bbe' # 校验
|
|
|
|
|
examPlanId = '64df03f5-55b5-47f6-a4cc-c63f42a63d49' # 考试项目ID
|
|
|
|
|
|
|
|
|
|
userExamId = '8f4eecda-cbbf-42fd-8af5-7d6ba6c5366a' # 已完成考试ID
|
|
|
|
|
userExamPlanId = '12c76711-e7ed-475f-8b3c-0c03354c420d' # 开始考试后当前考试ID
|
|
|
|
|
|
|
|
|
|
headers = {
|
|
|
|
|
'content-type': 'application/x-www-form-urlencoded;charset=UTF-8',
|
|
|
|
|
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.139 Safari/537.36',
|
|
|
|
|
'x-token': f'{x_token}' # 关键参数token
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#tenantCode = get_tenantCode('烟台大学') # 学校Code
|
|
|
|
|
tenantCode = '4137011066' # 学校Code
|
|
|
|
|
|
|
|
|
|
questions_answers = get_questions_answers()
|
|
|
|
|
# questions_answers = {'使用安全锤打开车窗的话,敲打哪里好呢?': ['车窗的角落。'], '关于发展心理咨询,下面说法正确的是:': ['发展心理咨询是心理健康的人对未来发展有困惑时做的咨询。'], '如果真的压力太大,放弃或者暂时放弃也是可以的,放过自己,让自己舒服一些更重要。可以选择一些自己喜欢的方式继续生活。旅游,工作,休息,不要强迫自己继续,也不要放弃自己。': ['正确'], '下列不属于研究生遇到的常见就业压力是:': ['缺乏专业相关经验'], '“京东金融客服来电,要求进行操作变更,否则会影响征信。”这样的诈骗方式利用了人的什么弱点呢?': ['恐惧'], '在古代,人们对江湖行骗种类进行了总结,其中最常见的四类是:': ['蜂麻燕雀'], '有网友给你推荐了一个可以超低价购买游戏装备的网站,你应该?': ['直接拒绝'], '如果你接到电话,对面说“我是省公安厅的,你的身份证号是XXX,你涉嫌洗钱”,你觉得这句话哪里有问题?': ['在公安系统中,省公安厅和市公安局的民警一般是不办案的'], '赌博的人是否也容易陷入校园贷?': ['是'], '根据《刑法》规定,编造虚假险情造成严重后果的,会被判处?': ['三年以上七年以下有期徒刑'], '网络赌博总是输的原因是?': ['有内幕'], '小A在网络上认识了一位未成年人,见未成年人对性不了解,骗对方给自己拍私密照片,并视频聊天自慰。你认为小A:': ['可能涉嫌强制猥亵罪'], '负有危险化学品安全监督管理职责的部门依法进行监督检查,监督检查人员不得少于()人,并应当出示执法证件;有关单位和个人对依法进行的监督检查应当予以配合,不得拒绝、阻碍。': ['2'], '帮骗子发送病毒文件,是违法犯罪行为吗?': ['是'], '根据《中华人民共和国刑法修正案(九)》规定,明知他人利用信息网络实施犯罪,为其犯罪提供互联网接入、服务器托管、网络存储、通讯传输等技术支持,或者提供广告推广、支付结算等帮助,情节严重的行为,处( )有期徒刑或者拘役,并处或者单处罚金。': ['三年以下'], '一次性打火机,只晒多长时间就会爆炸呢?': ['12分钟。'], '小A求复合失败后,在网络上发布前女友隐私视频,可能会涉嫌?': ['侮辱罪'], '如果购物网站的客服要加你微信沟通退款,你应该?': ['拒绝'], '如果患者还有意识和反应,不要实施CPR,不要挪动被施救人员,应立刻拨打120。': ['正确'], '大一新生文文突然接到社保局电话,说自己的社保卡被锁了,可以按照电话里的提示解锁。这时文文警惕的说,是不是可以到社保局去解锁。对方慌忙地挂断了电话。文文的这个做法对吗?为什么?': ['对。为了防止被骗,可以到社保局询问,或打官方电话询问。如果真的被锁了,可以到社保局解锁。'], '我们的发展目标是在( ),国家安全体系和能力全面加强。': ['二O三五年'], '研究生的人际关系压力通常有:': ['很多时候会觉得孤独', '与寝室、同学有矛盾', '与同学之间的恶意竞争氛围', '和导师有矛盾'], '要预防AI换脸诈骗,我们应该怎么做?': ['自己回拨手机存储的电话确认', '多重验证,确认身份,比如问一些没有在网络聊天中提过的信息', '关注社会新闻,了解最新诈骗手段'], '灭火器的厂家钢印和生产日期,一般在哪里?': ['灭火器的底圈', '灭火器的颈圈'], '以下哪些行为属于学术不端?': ['买卖论文', '伪造数据、文献', '剽窃、抄袭、侵占他人学术成果', '虚构他人共同署名'], '网贷诈骗怎么“赚钱”的?': ['高额手续费、违约金、保证金', '用各种理由骗你续费进去', '质押合同', '骗取银行卡验证码等信
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print(len(questions_answers), questions_answers)
|
|
|
|
|
|
|
|
|
|
questions = get_questions_List()
|
|
|
|
|
print(len(questions), questions)
|
|
|
|
|
|
|
|
|
|
# 题库有答案数量
|
|
|
|
|
print(len(set(questions_answers.keys()) & set(question[1] for question in questions.keys())))
|
|
|
|
|
|
|
|
|
|
for question,options in questions.items():
|
|
|
|
|
questionid = question[0]
|
|
|
|
|
if question[1] not in questions_answers:
|
|
|
|
|
continue
|
|
|
|
|
else:
|
|
|
|
|
answersids = []
|
|
|
|
|
for option in options:
|
|
|
|
|
if option[1] in questions_answers[question[1]]:
|
|
|
|
|
answersids.append(option[0])
|
|
|
|
|
recordQuestion(questionid, ','.join(answersids))
|
|
|
|
|
submit()
|