自动评分—100:使用 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)
while True:
try:
if self.browser.find_element(By.ID, 'userCurrentName'):
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:
for handle in self.browser.window_handles:
self.browser.switch_to.window(handle)
if self.browser.find_elements(By.ID, 'userCurrentName'):
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)
break
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()
修改的主要内容是在 run_program 方法中增加了一个循环,遍历所有打开的标签页,查找是否有 ID 为 userCurrentName 的元素,如果找到了说明登录成功,就可以开始打分了。这样可以避免在登录后打开多个标签页时,程序无法正常打分的问题。
原文地址: https://www.cveoy.top/t/topic/oDgs 著作权归作者所有。请勿转载和采集!