自动评分脚本:基于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
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
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
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):
options = Options()
options.add_experimental_option('debuggerAddress', '127.0.0.1:9527')
try:
self.browser = webdriver.Chrome(options=options)
except:
os.system(r'start chrome --remote-debugging-port=9527 --user-data-dir='D:\评阅用'')
time.sleep(5)
self.browser = webdriver.Chrome(options=options)
# 在所有打开的标签页中查找登录成功标识
for handle in self.browser.window_handles:
self.browser.switch_to.window(handle)
try:
if self.browser.find_element(By.ID, 'userCurrentName'):
self.update_running_label('登录成功')
break
except:
continue
else:
self.update_running_label('请在浏览器中登录')
self.running = False
return
while self.running:
while self.paused:
time.sleep(0.5)
self.update_running_label('打分中...')
try:
self.browser.switch_to.window(self.browser.window_handles[1])
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
def run(self):
self.root.mainloop()
if __name__ == '__main__':
auto_score_100 = AutoScore100()
auto_score_100.run()
改进说明
- 登录检查优化:
- 程序现在会遍历所有打开的标签页,寻找ID为'userCurrentName'的元素,以确保在正确的标签页中识别登录状态。
- 增加了异常处理,如果在登录过程中出现错误,程序会停止并提示用户在浏览器中登录。
- 代码结构调整:
- 将代码进行了适当的格式化,并添加了注释,提高代码的可读性。
- 输出调整:
- 将所有双引号改为单引号,以符合JSON格式要求。
使用说明
- 安装依赖库:
pip install seleniumpip install tkinter
- 配置Chrome浏览器:
- 打开Chrome浏览器,在地址栏输入
chrome://flags/#remote-debugging - 将
Remote Debugging设置为Enabled - 重新启动浏览器
- 打开Chrome浏览器,在地址栏输入
- 运行程序:
- 在程序目录下打开命令行,运行
python auto_score.py(假设程序文件名为auto_score.py)
- 在程序目录下打开命令行,运行
- 使用界面:
- 程序界面提供开始、暂停、继续三个按钮,操作简单易懂。
- 登录:
- 在浏览器中登录评分系统,确保当前页面包含ID为'userCurrentName'的元素。
- 开始评分:
- 点击'开始运行'按钮,程序会自动在评分页面进行评分操作。
注意
- 请确保你的评分系统页面包含正确的元素,并根据实际情况调整程序代码。
- 该脚本仅供学习交流使用,请勿用于任何非法用途。
- 为了防止出现意外情况,请在使用程序之前备份重要数据。', '修改功能:在所有打开的标签页中查找ID为“userCurrentName”的元素,一直到找到这个元素然后提示登录成功,内容:以防止在其他标签页登录而导致程序出错。同时,在登录过程中如果出现异常也会停止程序并提示用户在浏览器中登录。
原文地址: https://www.cveoy.top/t/topic/oDg1 著作权归作者所有。请勿转载和采集!