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('所有待批改元素已处理完毕')

代码说明:

  1. 获取浏览器驱动:
    • get_driver() 函数用于获取浏览器驱动。
    • 代码首先检查是否已经打开浏览器,如果已打开则连接到现有浏览器,否则启动新的浏览器并连接。
  2. 定位到目标页面:
    • 代码使用 driver.switch_to.window(handle) 切换到标题包含 '内蒙古开放大学' 的标签页。
  3. 统计待批改元素:
    • 使用 driver.find_elements('class name', 'status not-marked ng-scope') 查找所有待批改元素。
    • 遍历待批改元素,使用 element.find_element('class name', 'subject-number') 找到对应的题号元素,并提取题号。
  4. 获取待批改题号对应的分值:
    • 遍历待批改题号,使用 driver.find_element('xpath', ...) 根据题号找到对应的分值元素。
    • 提取分值元素中的数字。
  5. 循环处理待批改元素:
    • 遍历待批改题号和对应的分值,进行处理。
    • 处理逻辑需要根据实际情况修改,例如输入答案、填写分数、提交等操作。

注意事项:

  • 使用前需要安装 Selenium 和 ChromeDriver,并将 ChromeDriver 放置在系统环境变量中。
  • 需要根据实际情况修改代码中的选择器和处理逻辑。
  • 建议在操作完成后添加适当的等待时间,以确保页面元素加载完成。
  • 使用自动化脚本时请遵守网站的使用条款。
Python+Selenium自动化统计并处理网页待批改元素

原文地址: https://www.cveoy.top/t/topic/fZnT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录