Python Selenium 自动评分机器人
import os
import random
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.forum_thread = None
self.root = tk.Tk()
self.root.title('评分机器人1.2')
self.root.geometry('300x500')
# 创建按钮容器
button_frame = tk.Frame(self.root)
button_frame.pack(pady=10)
# 创建“开始运行”和“停止运行”按钮
self.start_button = tk.Button(button_frame, text='开始运行', command=self.start_program)
self.start_button.pack(side=tk.LEFT, padx=20)
self.stop_score_button = tk.Button(button_frame, text='停止运行', command=self.stop_program)
self.stop_score_button.pack(side=tk.LEFT)
# 创建“百分制打分”、“小分值打分”和“论坛打分”按钮
score_frame = tk.Frame(self.root)
score_frame.pack(pady=10)
self.start_score_button = tk.Button(score_frame, text='百分值打分', command=self.start_score_100)
self.start_score_button.pack(side=tk.LEFT, padx=20)
self.start_score_button_2 = tk.Button(score_frame, text='小分值打分', command=self.start_score)
self.start_score_button_2.pack(side=tk.LEFT)
self.start_forum_button = tk.Button(score_frame, text='论坛打分', command=self.start_forum_score)
self.start_forum_button.pack(side=tk.LEFT, padx=20)
# 创建“暂停打分”按钮和状态标签
self.pause_button = tk.Button(self.root, text='暂停打分', command=self.pause_program)
self.pause_button.pack(pady=10)
self.running_label = tk.Label(self.root, text='')
self.running_label.pack(pady=10)
# 创建提示标签
self.text_box = tk.Text(self.root, height=50, state='disabled')
self.text_box.pack(pady=50)
# 创建浏览器实例
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.config(state='normal')
self.start_score_button_2.config(state='normal')
self.start_forum_button.config(state='normal') # 启用论坛打分按钮
self.pause_button.config(state='normal')
self.stop_score_button.config(state='normal')
def start_score_100(self):
# ... (代码内容不变)
def start_score(self):
# ... (代码内容不变)
def start_forum_score(self):
if not self.running:
return
if self.forum_thread and self.forum_thread.is_alive():
return
self.start_forum_button.config(state='disabled')
self.stop_score_button.config(state='normal')
self.update_running_label('论坛打分中...')
self.forum_thread = Thread(target=self.forum_score_program)
self.forum_thread.start()
def stop_program(self):
self.running = False
self.paused = False
self.start_button.config(state='normal')
self.start_score_button.config(state='disabled')
self.start_score_button_2.config(state='disabled')
self.start_forum_button.config(state='disabled') # 停用论坛打分按钮
self.stop_score_button.config(state='disabled')
self.pause_button.config(state='disabled')
self.update_running_label('已停止运行')
# 停止论坛打分线程
if self.forum_thread and self.forum_thread.is_alive():
self.forum_thread.join()
def pause_program(self):
# ... (代码内容不变)
def update_running_label(self, text):
# ... (代码内容不变)
def run_program(self):
# ... (代码内容不变)
def score_program_100(self):
# ... (代码内容不变)
def score_program(self):
# ... (代码内容不变)
def forum_score_program(self):
try:
# 循环打分论坛分值
while True:
if not self.running:
break
if self.paused:
continue
# 等待论坛打分输入框出现
while True:
try:
forum_score_input = self.browser.find_element(By.XPATH, '//input[@ng-model="currentEnrollment.forum_score.display_score"]')
break
except:
pass
time.sleep(3)
# 判断是否已经打过分
try:
blank_message = self.browser.find_element(By.CLASS_NAME, 'blank-message')
if blank_message.text == '暂无':
# 填写分值
score = random.randint(94, 99)
forum_score_input.send_keys(str(score))
time.sleep(1.5)
# 点击保存按钮
save_button = self.browser.find_element(By.XPATH, '//button[@ng-click="saveScore(currentEnrollment)"]')
save_button.click()
time.sleep(2.5)
self.update_text_box(f'本次论坛分值为:{score}')
self.update_running_label('论坛打分中...')
else:
self.update_text_box('本学生已打过论坛分,跳过')
except:
pass
# 点击下一个学生
next_student_element = self.browser.find_element(By.XPATH, '//i[@ng-click="goToNextStudent()"]')
if 'disabled' in next_student_element.get_attribute('class'):
print('已经到最后一个学生')
self.update_running_label('已到最后,请手动保存后重新开始!')
break
else:
next_student_element.click()
time.sleep(3)
self.update_running_label('论坛打分中...')
except Exception as e:
print(e)
self.update_running_label('论坛打分失败,请重试')
finally:
self.start_forum_button.config(state='normal')
self.stop_score_button.config(state='disabled')
self.pause_button.config(state='disabled')
def run(self):
self.root.mainloop()
def update_text_box(self, text):
self.text_box.config(state='normal')
self.text_box.insert('end', text + '\n')
self.text_box.see('end')
self.text_box.config(state='disabled')
if __name__ == '__main__':
auto_score_100 = AutoScore100()
auto_score_100.run()
原文地址: https://www.cveoy.top/t/topic/f2eW 著作权归作者所有。请勿转载和采集!