Python+Selenium自动化统计并处理网页待批改元素
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
import time
import os
def get_driver():
# 检查是否已经打开浏览器
browser_opened = False
for handle in webdriver.Chrome().window_handles:
browser_opened = True
break
# 创建浏览器实例或在已有浏览器中操作
if browser_opened:
options = Options()
options.debugger_address = '127.0.0.1:9222'
driver = webdriver.Chrome(options=options)
else:
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')
driver = webdriver.Chrome(options=options)
return driver
driver = get_driver()
# 找到有'内蒙古开放大学'字样的标签页
while True:
for handle in driver.window_handles:
driver.switch_to.window(handle)
if '内蒙古开放大学' in driver.title:
print('登录成功')
break
else:
time.sleep(3)
continue
break
# 统计待批改元素数量及对应的题号
while True:
not_marked_elements = driver.find_elements('class name', 'status not-marked ng-scope')
if len(not_marked_elements) > 0:
not_marked_numbers = []
for element in not_marked_elements:
number_element = element.find_element('class name', 'subject-number')
number = int(''.join(filter(str.isdigit, number_element.text)))
not_marked_numbers.append(number)
print(f'待批改元素数量:{len(not_marked_elements)}')
print(f'待批改的题号:{not_marked_numbers}')
break
else:
time.sleep(3)
# 获取待批改题号对应的分值
scores = []
for number in not_marked_numbers:
# 根据题号找到对应的分值元素
score_element = driver.find_element('xpath', f'//div[contains(@class, 'subject-number') and text() = '{number}']/following-sibling::div//div[@class='summary-sub-title']')
score = int(''.join(filter(str.isdigit, score_element.text)))
scores.append(score)
print(f'待批改题号对应的分值为:{scores}')
# 循环处理待批改元素
for i, number in enumerate(not_marked_numbers):
print(f'正在处理第 {number} 题,分值为:{scores[i]}')
# 在这里添加处理逻辑,例如:
# 1. 根据题号找到答案输入框
# 2. 输入答案
# 3. 找到分数输入框
# 4. 输入分数
# 5. 点击提交按钮
# 处理完成后,可以将该元素从 not_marked_numbers 和 scores 中移除,避免重复处理
print('所有待批改元素已处理完毕')
代码说明:
- 获取浏览器驱动:
get_driver()函数用于获取浏览器驱动。- 代码首先检查是否已经打开浏览器,如果已打开则连接到现有浏览器,否则启动新的浏览器并连接。
- 定位到目标页面:
- 代码使用
driver.switch_to.window(handle)切换到标题包含 '内蒙古开放大学' 的标签页。
- 代码使用
- 统计待批改元素:
- 使用
driver.find_elements('class name', 'status not-marked ng-scope')查找所有待批改元素。 - 遍历待批改元素,使用
element.find_element('class name', 'subject-number')找到对应的题号元素,并提取题号。
- 使用
- 获取待批改题号对应的分值:
- 遍历待批改题号,使用
driver.find_element('xpath', ...)根据题号找到对应的分值元素。 - 提取分值元素中的数字。
- 遍历待批改题号,使用
- 循环处理待批改元素:
- 遍历待批改题号和对应的分值,进行处理。
- 处理逻辑需要根据实际情况修改,例如输入答案、填写分数、提交等操作。
注意事项:
- 使用前需要安装 Selenium 和 ChromeDriver,并将 ChromeDriver 放置在系统环境变量中。
- 需要根据实际情况修改代码中的选择器和处理逻辑。
- 建议在操作完成后添加适当的等待时间,以确保页面元素加载完成。
- 使用自动化脚本时请遵守网站的使用条款。
原文地址: https://www.cveoy.top/t/topic/fZnT 著作权归作者所有。请勿转载和采集!