parent
2008b42f8c
commit
e4e168214c
@ -0,0 +1,228 @@
|
||||
from selenium.webdriver import Chrome
|
||||
from selenium.webdriver.common.by import By
|
||||
from selenium.webdriver.chrome.options import Options
|
||||
import time
|
||||
import csv
|
||||
import difflib
|
||||
from lxml import etree
|
||||
import tkinter as tk
|
||||
def close_window():
|
||||
root.destroy()
|
||||
|
||||
root = tk.Tk()
|
||||
root.title("欢迎")
|
||||
|
||||
# 设置窗口内容为 "欢迎使用本程序"
|
||||
label1 = tk.Label(root, text="湖南大学实验室安全考试自动答题程序", font=('Arial', 16))
|
||||
label1.pack(pady=10)
|
||||
|
||||
label2 = tk.Label(root, text="请确认使用校园网和Chrome浏览器", font=('Arial', 14))
|
||||
label2.pack(pady=10)
|
||||
|
||||
label3 = tk.Label(root, text="Created By: JesterHey", font=('Arial', 14))
|
||||
label3.pack(pady=5)
|
||||
|
||||
label4 = tk.Label(root, text="针对湖大物电院优化题库", font=('Arial', 14))
|
||||
label4.pack(pady=10)
|
||||
|
||||
# 设置窗口大小并使其居中
|
||||
window_width = 400
|
||||
window_height = 200
|
||||
screen_width = root.winfo_screenwidth()
|
||||
screen_height = root.winfo_screenheight()
|
||||
x_pos = (screen_width / 2) - (window_width / 2)
|
||||
y_pos = (screen_height / 2) - (window_height / 2)
|
||||
root.geometry(f"{window_width}x{window_height}+{int(x_pos)}+{int(y_pos)}")
|
||||
|
||||
# 设置5秒后自动关闭窗口
|
||||
root.after(5000, close_window)
|
||||
|
||||
root.mainloop()
|
||||
|
||||
|
||||
# 初始化用户名、密码和选择为空字符串
|
||||
username = ""
|
||||
password = ""
|
||||
choice = ""
|
||||
|
||||
def get_input(event=None):
|
||||
global username, password, choice
|
||||
username = username_entry.get()
|
||||
password = password_entry.get()
|
||||
choice = choice_entry.get()
|
||||
root.destroy() # 关闭窗口
|
||||
|
||||
root = tk.Tk()
|
||||
root.title("登录窗口")
|
||||
|
||||
# 设置窗口大小并使其居中
|
||||
window_width = 400
|
||||
window_height = 400
|
||||
screen_width = root.winfo_screenwidth()
|
||||
screen_height = root.winfo_screenheight()
|
||||
x_pos = (screen_width / 2) - (window_width / 2)
|
||||
y_pos = (screen_height / 2) - (window_height / 2)
|
||||
root.geometry(f"{window_width}x{window_height}+{int(x_pos)}+{int(y_pos)}")
|
||||
|
||||
# 创建用户名标签和输入框
|
||||
tk.Label(root, text="学号").pack(pady=10)
|
||||
username_entry = tk.Entry(root)
|
||||
username_entry.pack(pady=10)
|
||||
username_entry.bind('<Return>', get_input)
|
||||
|
||||
# 创建密码标签和输入框
|
||||
tk.Label(root, text="个人门户密码").pack(pady=10)
|
||||
password_entry = tk.Entry(root,show='*')
|
||||
password_entry.pack(pady=10)
|
||||
password_entry.bind('<Return>', get_input)
|
||||
|
||||
# 创建选择模式标签和输入框
|
||||
tk.Label(root, text="Enter 1 (模拟考) or 2 (正式考):").pack(pady=10)
|
||||
choice_entry = tk.Entry(root)
|
||||
choice_entry.pack(pady=10)
|
||||
choice_entry.bind('<Return>', get_input)
|
||||
|
||||
# 创建按钮来获取输入
|
||||
tk.Button(root, text="提交", command=get_input).pack(pady=20)
|
||||
|
||||
root.mainloop()
|
||||
|
||||
opt= Options()
|
||||
opt.add_experimental_option("detach", True)
|
||||
def find_similar_values(value_to_search,page=0,filename='quizbase.csv',threshold=0.9): #设置匹配度阈值
|
||||
results = []
|
||||
|
||||
value_to_search = value_to_search.replace('?', '\\?')
|
||||
value_to_search = value_to_search.replace('(', '\\(')
|
||||
value_to_search = value_to_search.replace(')', '\\)')
|
||||
|
||||
|
||||
with open(filename, 'r',encoding='utf8') as f:
|
||||
reader = csv.reader(f)
|
||||
|
||||
for row in reader:
|
||||
similarity = difflib.SequenceMatcher(None, row[0], value_to_search).ratio()
|
||||
if similarity >= threshold:
|
||||
results.append(row[1])
|
||||
|
||||
if results == []:
|
||||
return results
|
||||
elif page<=4:
|
||||
l1=[]
|
||||
for i in results:
|
||||
if i == '正确' or i =='错误':
|
||||
l1.append(i)
|
||||
return l1
|
||||
else:
|
||||
l1=[]
|
||||
for item in results:
|
||||
if item in 'ABCD':
|
||||
l1.append(item)
|
||||
return l1
|
||||
return results
|
||||
safari = Chrome(options=opt)
|
||||
url = 'https://labsafe.hnu.edu.cn/labexam/index.php'
|
||||
safari.get(url)
|
||||
time.sleep(1)
|
||||
el = safari.find_element(By.XPATH,'//*[@id="formExam"]/div/a/input')
|
||||
el.click()
|
||||
|
||||
safari.find_element(By.XPATH,'//*[@id="username"]').send_keys(username)
|
||||
time.sleep(1)
|
||||
safari.find_element(By.XPATH,'//*[@id="password"]').send_keys(password)
|
||||
time.sleep(1)
|
||||
safari.find_element(By.XPATH,'//*[@id="dl"]').click()
|
||||
time.sleep(1)
|
||||
safari.find_element(By.XPATH,'//*[@id="article"]/div[3]/div[2]/ul/a[1]/li').click()
|
||||
time.sleep(1)
|
||||
safari.find_element(By.XPATH,'//*[@id="tkqcl"]/ul/li/label').click()
|
||||
time.sleep(1)
|
||||
choice = int(choice)
|
||||
safari.find_element(By.XPATH,f'//*[@id="article"]/div[4]/div[2]/div/a[{choice}]').click()
|
||||
time.sleep(1)
|
||||
def clickanswer(l:list,page,index):
|
||||
if l == []:
|
||||
print('no answer')
|
||||
elif l[0] == '错误' or l[0] == 'A':
|
||||
_id = 'ti_'+ str(page*10+index) + '_0'
|
||||
safari.find_element(By.ID,_id).click()
|
||||
elif l[0] == '正确' or l[0] == 'B':
|
||||
_id = 'ti_'+ str(page*10+index) + '_1'
|
||||
safari.find_element(By.ID,_id).click()
|
||||
elif l[0] == 'C':
|
||||
_id = 'ti_'+ str(page*10+index) + '_2'
|
||||
safari.find_element(By.ID,_id).click()
|
||||
elif l[0] == 'D':
|
||||
_id = 'ti_'+ str(page*10+index) + '_3'
|
||||
safari.find_element(By.ID,_id).click()
|
||||
pass
|
||||
# def findanswer(s:str,answersource):
|
||||
# s = s.split('、')[1]
|
||||
# s = s.replace('?', '\\?')
|
||||
# s = s.replace('(', '\\(')
|
||||
# s = s.replace(')', '\\)')
|
||||
# s = s + '.*?你未作答标准答案:(?P<answer>.*?)</div>'
|
||||
# pattern = re.compile(s)
|
||||
# answer = re.findall(pattern, answersource)
|
||||
# return answer
|
||||
for page in range(10): #i是页码
|
||||
if page == 0:
|
||||
answerlist=[]
|
||||
page_source = safari.page_source
|
||||
htmltxt = etree.HTML(page_source)
|
||||
for tihao in range(1,11):
|
||||
qtxt = htmltxt.xpath(f'//*[@id="dati"]/div[{tihao}]/h3/text()')[0].split('、',1)[-1]
|
||||
answer = find_similar_values(value_to_search=qtxt,page=page)
|
||||
answerlist.append(answer)
|
||||
co=1
|
||||
while co<=10:
|
||||
clickanswer(answerlist[co-1],page,co)
|
||||
co+=1
|
||||
# <input type="radio" name="ti_91" id="ti_91_1" value="B">
|
||||
# count = 0
|
||||
# for i in answerlist:
|
||||
# if i == []:
|
||||
# count+=1
|
||||
# print(answerlist,end=' ')
|
||||
# print(f'有{count}个题目未匹配到答案')
|
||||
safari.find_element(By.XPATH,'//*[@id="dati"]/div[11]/input[1]').click()
|
||||
time.sleep(1)
|
||||
elif 1<=page<9:
|
||||
answerlist=[]
|
||||
page_source = safari.page_source
|
||||
htmltxt = etree.HTML(page_source)
|
||||
for tihao in range(1,11):
|
||||
qtxt = htmltxt.xpath(f'//*[@id="dati"]/div[{tihao}]/h3/text()')[0].split('、',1)[-1]
|
||||
answer = find_similar_values(page=page,value_to_search=qtxt)
|
||||
answerlist.append(answer)
|
||||
co = 1
|
||||
while co <= 10:
|
||||
clickanswer(answerlist[co - 1], page, co)
|
||||
co += 1
|
||||
# count = 0
|
||||
# for i in answerlist:
|
||||
# if i == []:
|
||||
# count+=1
|
||||
# print(answerlist,end=' ')
|
||||
# print(f'有{count}个题目未匹配到答案')
|
||||
safari.find_element(By.XPATH,'//*[@id="dati"]/div[11]/input[2]').click()
|
||||
time.sleep(1)
|
||||
else:
|
||||
answerlist = []
|
||||
page_source = safari.page_source
|
||||
htmltxt = etree.HTML(page_source)
|
||||
for tihao in range(1,11):
|
||||
qtxt = htmltxt.xpath(f'//*[@id="dati"]/div[{tihao}]/h3/text()')[0].split('、',1)[-1]
|
||||
answer = find_similar_values(value_to_search=qtxt,page=page)
|
||||
answerlist.append(answer)
|
||||
co = 1
|
||||
while co <= 10:
|
||||
clickanswer(answerlist[co - 1], page, co)
|
||||
co += 1
|
||||
# # <input type="radio" name="ti_91" id="ti_91_1" value="B">
|
||||
# count = 0
|
||||
# for i in answerlist:
|
||||
# if i == []:
|
||||
# count+=1
|
||||
# print(answerlist,end=' ')
|
||||
# print(f'有{count}个题目未匹配到答案')
|
Loading…
Reference in new issue