自动评分工具 - Python Selenium 自动化打分脚本
import os
import time
import random
import tkinter as tk
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from threading import Thread
class AutoScore100:
def __init__(self):
self.running = False
self.paused = False
self.browser = None
self.thread = None
self.root = tk.Tk()
self.root.title('自动评分—100')
self.root.geometry('300x250')
self.start_button = tk.Button(self.root, text='开始运行', command=self.start_program)
self.start_button.pack(pady=10)
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')
self.resume_button = tk.Button(self.root, text='继续运行', command=self.resume_program)
self.resume_button.pack(pady=10)
self.resume_button.config(state='disabled')
def start_program(self):
if self.running:
return
self.running = True
if self.browser is None:
os.system(r'start chrome --remote-debugging-port=9527 --user-data-dir=\'D:\评阅用\'')
options = Options()
options.add_experimental_option('debuggerAddress', '127.0.0.1:9527')
self.browser = webdriver.Chrome(options=options)
self.thread = Thread(target=self.run_program)
self.thread.start()
self.start_button.config(state='disabled')
self.pause_button.config(state='normal')
def pause_program(self):
if not self.running or self.paused:
return
self.paused = True
self.pause_button.config(state='disabled')
self.resume_button.config(state='normal')
self.update_running_label('已暂停')
def resume_program(self):
if not self.running or not self.paused:
return
self.paused = False
self.resume_button.config(state='disabled')
self.pause_button.config(state='normal')
self.update_running_label('打分中...')
def update_running_label(self, text):
self.running_label.config(text=text)
def run_program(self):
while True:
try:
if '内蒙古开放大学' in self.browser.title:
self.update_running_label('登录成功')
break
else:
self.update_running_label('请在浏览器中登录')
time.sleep(1)
except:
self.update_running_label('请在浏览器中登录')
self.running = False
return
while self.running:
while self.paused:
time.sleep(0.5)
self.update_running_label('打分中...')
try:
while self.running:
while self.paused:
time.sleep(0.5)
try:
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)
except Exception as e:
print(e)
continue
else:
if '已到最后' in self.browser.page_source:
self.update_running_label('已到最后,请手动保存后重新开始!')
self.running = False
break
finally:
self.browser.switch_to.window(self.browser.window_handles[0])
self.browser.refresh()
def run(self):
self.root.mainloop()
if __name__ == '__main__':
auto_score_100 = AutoScore100()
auto_score_100.run()
功能说明
该脚本能够实现以下功能:
- 自动登录网页: 使用
selenium库自动打开指定网页并登录,无需手动操作。 - 自动填写分数: 自动获取分数输入框元素,随机生成分数并填写。
- 自动提交: 自动点击提交按钮,完成打分操作。
- 暂停和继续: 提供暂停和继续按钮,方便用户控制脚本的执行。
使用方法
- 安装必要的库: 使用
pip install selenium命令安装selenium库。 - 下载对应浏览器的驱动: 从 ChromeDriver 网站下载对应浏览器的驱动程序,并将驱动程序放在系统环境变量
PATH所指向的目录下。 - 修改代码: 将代码中的
'D:\评阅用\'修改为您的浏览器用户数据目录的路径。 - 运行脚本: 双击脚本文件即可运行。
注意
- 该脚本只适用于特定的网页,需要根据实际情况修改代码。
- 请确保您的浏览器用户数据目录的路径正确,否则脚本无法正常运行。
- 使用该脚本可能会存在风险,请谨慎使用。
优化建议
- 可以添加错误处理机制,防止脚本因网页元素变化而崩溃。
- 可以添加日志记录功能,方便调试和排查问题。
- 可以使用更稳定的随机分数生成算法。
- 可以使用更简洁的代码风格。
- 可以使用其他库来提升脚本的性能和可靠性。
免责声明
本脚本仅供参考,作者不承担任何使用该脚本所产生的后果。请您自行评估风险,并谨慎使用。
原文地址: https://www.cveoy.top/t/topic/fYOo 著作权归作者所有。请勿转载和采集!