自动评分—100: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.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 = tk.Button(self.root, text='开始打分', command=self.start_score)
self.start_score_button.pack(pady=10)
self.start_score_button.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')
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.start_score_button.config(state='normal')
self.pause_button.config(state='normal')
self.stop_score_button.config(state='normal')
def start_score(self):
if not self.running:
return
if self.score_thread and self.score_thread.is_alive():
return
self.start_score_button.config(state='disabled')
self.stop_score_button.config(state='normal')
self.update_running_label('打分中...')
self.score_thread = Thread(target=self.score_program)
self.score_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.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.config(state='normal')
else:
self.paused = True
self.pause_button.config(text='继续打分')
self.start_score_button.config(state='disabled')
def update_running_label(self, text):
self.running_label.config(text=text)
def run_program(self):
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')
while self.running:
while self.paused:
time.sleep(0.5)
self.update_running_label('等待登录...')
try:
if not self.browser:
self.browser = webdriver.Chrome(options=options)
else:
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.config(state='normal')
break
else:
if len(self.browser.window_handles) == 1:
self.browser.get('http://study.imu.edu.cn/')
self.update_running_label('未登录')
time.sleep(1)
continue
break
break
except Exception as e:
print(e)
continue
def score_program(self):
try:
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.config(state='normal')
self.stop_score_button.config(state='disabled')
self.pause_button.config(state='disabled')
def run(self):
self.root.mainloop()
if __name__ == '__main__':
auto_score_100 = AutoScore100()
auto_score_100.run()
功能说明:
- 自动评分:脚本会自动在指定页面中找到评分框并输入随机分数(范围可自定义)。
- 暂停/继续打分:点击“暂停打分”按钮,脚本会停止打分,点击“继续打分”按钮,脚本会继续打分。
- 停止运行:点击“停止运行”按钮,脚本会停止所有操作,并关闭浏览器窗口。
- 开始运行:点击“开始运行”按钮,脚本会启动浏览器并自动登录到指定页面。
使用说明:
- 将代码保存为
.py文件。 - 修改代码中的
--user-data-dir='D:\评阅用'路径为你的 chrome 用户数据目录,即 Chrome 浏览器安装目录下的User Data目录。 - 将
score-box和nav-text替换为目标页面评分框和提交按钮的 class 名称。 - 运行
.py文件。
注意事项:
- 确保已安装 Python 和 selenium 库。
- 在目标页面中,评分框和提交按钮的 class 名称需要正确填写。
- 脚本需要使用到 Chrome 浏览器,请确保 Chrome 浏览器已安装并运行。
- 本脚本仅供学习交流使用,请勿用于非法用途。
优化建议:
- 可以添加错误处理机制,例如捕获元素找不到等异常,并给出提示信息。
- 可以添加循环评分功能,例如自动评分所有页面。
- 可以将评分范围和登录地址等参数设置为可配置项。
- 可以添加进度条,显示评分进度。
其他:
本脚本需要使用到 Chrome 浏览器,可以使用 --user-data-dir 参数指定 chrome 的用户数据目录,例如 --user-data-dir='D:\评阅用'。这样,脚本启动后会自动打开 Chrome 浏览器,并使用指定的配置文件。
联系方式:
如果您在使用过程中遇到任何问题,请联系我。
版权声明:
本脚本仅供学习交流使用,版权归作者所有。
免责声明:
本脚本仅供学习交流使用,请勿用于非法用途。作者对使用本脚本造成的任何损失概不负责。', 'content': '```python 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.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 = tk.Button(self.root, text='开始打分', command=self.start_score)
self.start_score_button.pack(pady=10)
self.start_score_button.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')
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.start_score_button.config(state='normal')
self.pause_button.config(state='normal')
self.stop_score_button.config(state='normal')
def start_score(self):
if not self.running:
return
if self.score_thread and self.score_thread.is_alive():
return
self.start_score_button.config(state='disabled')
self.stop_score_button.config(state='normal')
self.update_running_label('打分中...')
self.score_thread = Thread(target=self.score_program)
self.score_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.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.config(state='normal')
else:
self.paused = True
self.pause_button.config(text='继续打分')
self.start_score_button.config(state='disabled')
def update_running_label(self, text):
self.running_label.config(text=text)
def run_program(self):
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')
while self.running:
while self.paused:
time.sleep(0.5)
self.update_running_label('等待登录...')
try:
if not self.browser:
self.browser = webdriver.Chrome(options=options)
else:
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.config(state='normal')
break
else:
if len(self.browser.window_handles) == 1:
self.browser.get('http://study.imu.edu.cn/')
self.update_running_label('未登录')
time.sleep(1)
continue
break
break
except Exception as e:
print(e)
continue
def score_program(self):
try:
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.config(state='normal')
self.stop_score_button.config(state='disabled')
self.pause_button.config(state='disabled')
def run(self):
self.root.mainloop()
if name == 'main': auto_score_100 = AutoScore100() auto_score_100.run()
**功能说明:**
1. 自动评分:脚本会自动在指定页面中找到评分框并输入随机分数(范围可自定义)。
2. 暂停/继续打分:点击“暂停打分”按钮,脚本会停止打分,点击“继续打分”按钮,脚本会继续打分。
3. 停止运行:点击“停止运行”按钮,脚本会停止所有操作,并关闭浏览器窗口。
4. 开始运行:点击“开始运行”按钮,脚本会启动浏览器并自动登录到指定页面。
**使用说明:**
1. 将代码保存为 `.py` 文件。
2. 修改代码中的 `--user-data-dir='D:\评阅用'` 路径为你的 chrome 用户数据目录,即 Chrome 浏览器安装目录下的 `User Data` 目录。
3. 将 `score-box` 和 `nav-text` 替换为目标页面评分框和提交按钮的 class 名称。
4. 运行 `.py` 文件。
**注意事项:**
1. 确保已安装 Python 和 selenium 库。
2. 在目标页面中,评分框和提交按钮的 class 名称需要正确填写。
3. 脚本需要使用到 Chrome 浏览器,请确保 Chrome 浏览器已安装并运行。
4. 本脚本仅供学习交流使用,请勿用于非法用途。
**优化建议:**
1. 可以添加错误处理机制,例如捕获元素找不到等异常,并给出提示信息。
2. 可以添加循环评分功能,例如自动评分所有页面。
3. 可以将评分范围和登录地址等参数设置为可配置项。
4. 可以添加进度条,显示评分进度。
**其他:**
本脚本需要使用到 Chrome 浏览器,可以使用 `--user-data-dir` 参数指定 chrome 的用户数据目录,例如 `--user-data-dir='D:\评阅用'`。这样,脚本启动后会自动打开 Chrome 浏览器,并使用指定的配置文件。
**联系方式:**
如果您在使用过程中遇到任何问题,请联系我。
**版权声明:**
本脚本仅供学习交流使用,版权归作者所有。
**免责声明:**
本脚本仅供学习交流使用,请勿用于非法用途。作者对使用本脚本造成的任何损失概不负责。
原文地址: http://www.cveoy.top/t/topic/fY06 著作权归作者所有。请勿转载和采集!