Python 自动评分工具 - 100 分和 小分值 打分功能
import random import os import time import tkinter as tk from threading import Thread
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By
class AutoScore100: def init(self): self.running = False self.paused = False self.browser = None self.thread = None self.score_thread = None
self.root = tk.Tk()
self.root.title('自动评分—100')
self.root.geometry('300x300')
self.start_button = tk.Button(self.root, text='开始运行', command=self.start_program)
self.start_button.pack(pady=10)
self.stop_score_button = tk.Button(self.root, text='停止运行', command=self.stop_program)
self.stop_score_button.pack(pady=10)
self.stop_score_button.config(state='disabled')
self.start_score_button_100 = tk.Button(self.root, text='开始打100分', command=self.start_score_100)
self.start_score_button_100.pack(pady=10)
self.start_score_button_100.config(state='disabled')
self.start_score_button_small = tk.Button(self.root, text='开始打小分', command=self.start_score_small)
self.start_score_button_small.pack(pady=10)
self.start_score_button_small.config(state='disabled')
self.running_label = tk.Label(self.root, text='')
self.running_label.pack(pady=10)
self.pause_button = tk.Button(self.root, text='暂停打分', command=self.pause_program)
self.pause_button.pack(pady=10)
self.pause_button.config(state='disabled')
# 创建浏览器实例
options = Options()
options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
try:
self.browser = webdriver.Chrome(options=options)
except:
pass
def start_program(self):
if self.running:
return
self.running = True
if not self.browser:
os.system(r'start chrome --remote-debugging-port=9222 --user-data-dir="D:\评阅用"')
options = Options()
options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
self.browser = webdriver.Chrome(options=options)
self.thread = Thread(target=self.run_program)
self.thread.start()
self.start_button.config(state='disabled')
self.start_score_button_100.config(state='normal')
self.start_score_button_small.config(state='normal')
self.pause_button.config(state='normal')
self.stop_score_button.config(state='normal')
def start_score_100(self):
if not self.running:
return
if self.score_thread and self.score_thread.is_alive():
return
self.start_score_button_100.config(state='disabled')
self.start_score_button_small.config(state='disabled')
self.stop_score_button.config(state='normal')
self.update_running_label('打100分中...')
self.score_thread = Thread(target=self.score_program_100)
self.score_thread.start()
def start_score_small(self):
if not self.running:
return
if self.score_thread and self.score_thread.is_alive():
return
self.start_score_button_100.config(state='disabled')
self.start_score_button_small.config(state='disabled')
self.stop_score_button.config(state='normal')
self.update_running_label('打小分中...')
self.score_thread = Thread(target=self.score_program_small)
self.score_thread.start()
def stop_program(self):
self.running = False
self.paused = False
self.start_button.config(state='normal')
self.start_score_button_100.config(state='disabled')
self.start_score_button_small.config(state='disabled')
self.stop_score_button.config(state='disabled')
self.pause_button.config(state='disabled')
self.update_running_label('已停止运行')
def pause_program(self):
if not self.running:
return
if self.paused:
self.paused = False
self.pause_button.config(text='暂停打分')
self.start_score_button_100.config(state='normal')
self.start_score_button_small.config(state='normal')
else:
self.paused = True
self.pause_button.config(text='继续打分')
self.start_score_button_100.config(state='disabled')
self.start_score_button_small.config(state='disabled')
def update_running_label(self, text):
self.running_label.config(text=text)
def run_program(self):
while self.running:
while self.paused:
time.sleep(0.5)
self.update_running_label('等待登录...')
try:
while True:
for handle in self.browser.window_handles:
self.browser.switch_to.window(handle)
if '内蒙古开放大学' in self.browser.title:
self.update_running_label('登录成功')
self.start_score_button_100.config(state='normal')
self.start_score_button_small.config(state='normal')
break
else:
self.update_running_label('未登录')
time.sleep(5)
continue
break
break
except Exception as e:
print(e)
continue
def score_program_100(self):
try:
#循环打分100分值
while True:
if not self.running:
break
if self.paused:
continue
score_box = self.browser.find_element(By.CLASS_NAME, 'score-box')
score_input = score_box.find_element(By.TAG_NAME, 'input')
score_input.clear()
score_input.send_keys(str(random.randint(94, 99)))
time.sleep(1)
submit_button = self.browser.find_element(By.CLASS_NAME, 'nav-text')
submit_button.click()
time.sleep(2)
if '已到最后' in self.browser.page_source:
self.update_running_label('已到最后,请手动保存后重新开始!')
break
except Exception as e:
print(e)
self.update_running_label('打分失败,请重试')
finally:
self.start_score_button_100.config(state='normal')
self.start_score_button_small.config(state='normal')
self.stop_score_button.config(state='disabled')
self.pause_button.config(state='disabled')
def score_program_small(self):
try:
#循环打分小分值
while True:
if not self.running:
break
if self.paused:
continue
# 等待题目组出现
while True:
try:
elements = self.browser.find_elements(By.CLASS_NAME, "card-div")
if elements:
break
except:
pass
time.sleep(3)
score_list = []
subject_number_list = []
for element in elements:
# 查找待批改元素
card_score_element = element.find_element(By.CLASS_NAME, "card-score")
if "待批改" not in card_score_element.text:
continue
# 查找题号元素
subject_number_element = element.find_element(By.CLASS_NAME, "subject-number")
subject_number_text = subject_number_element.text
# 提取题号
subject_number = ""
for char in subject_number_text:
if char.isdigit():
subject_number += char
subject_number_list.append(subject_number)
print("待批改的题目号为:", subject_number)
# 判断是否作答
answered = False
elements = self.browser.find_elements(By.ID, f"subject-{subject_number}")
for element in elements:
answer_content_element = element.find_elements(By.CLASS_NAME, "answer-content")
if answer_content_element:
answered = True
break
if not answered:
print(f"第{subject_number}题未作答,不获取分值")
continue
# 查找题目分值
summary_numbers = []
for element in elements:
summary_element = element.find_element(By.CLASS_NAME, "summary-sub-title")
summary_text = summary_element.text
summary_number = ""
for char in summary_text:
if char.isdigit():
summary_number += char
summary_numbers.append(int(summary_number))
print(f"第{subject_number}题的分值为:{summary_number}")
# 将题目分值存入列表
score_list.extend(summary_numbers)
# 如果只有一个题目,则对这道题的分值减去1-2分
if len(score_list) == 1:
score_list[0] -= random.randint(1, 2)
print(f"第{subject_number_list[0]}题减{score_list[0]}分,已填入{score_list[0]}分")
else:
# 随机选择2-5个题目减分
if len(score_list) <= 5:
reduce_num = len(score_list) - 1
else:
reduce_num = random.randint(2, 5)
# 对样本数量进行判断
if reduce_num > len(score_list) - 1:
reduce_num = len(score_list) - 1
elif reduce_num < 0:
reduce_num = 0
reduce_index_list = random.sample(range(len(score_list)), reduce_num)
# 对选择的
原文地址: https://www.cveoy.top/t/topic/f0tO 著作权归作者所有。请勿转载和采集!