Python Selenium 自动打分脚本优化:跳过已评分学生

本教程将介绍如何优化使用 Python Selenium 编写的自动打分脚本,使其能够跳过已评分的学生,提高脚本运行效率。

问题背景

假设你有一个网页,需要对学生的论坛参与情况进行评分。你已经编写了一个 Python Selenium 脚本来自动化这个过程。然而,该脚本会对所有学生进行评分,包括已经评分过的学生,这会浪费时间和资源。

解决方案

为了解决这个问题,我们需要修改脚本,使其能够在评分前检查学生是否已经被评分。如果学生已经被评分,脚本将跳过该学生并进行下一个学生的评分。

以下是需要修改的代码:

def forum_score_program(self):
    try:
        # 循环打分论坛分值
        while True:
            if not self.running:
                break

            if self.paused:
                continue

            # 等待论坛打分输入框出现
            while True:
                try:
                    forum_score_input = self.browser.find_element(By.XPATH, '//input[@ng-model="currentEnrollment.forum_score.display_score"]')
                    break
                except:
                    pass
                time.sleep(3)

            # 判断是否已经打过分
            try:
                blank_message = self.browser.find_element(By.CLASS_NAME, 'blank-message')
                if blank_message.text == '暂无':
                    # 填写分值
                    score = random.randint(94, 99)
                    forum_score_input.send_keys(str(score))
                    time.sleep(1.5)
                    # 点击保存按钮
                    save_button = self.browser.find_element(By.XPATH, '//button[@ng-click="saveScore(currentEnrollment)"]')
                    save_button.click()
                    time.sleep(2.5)
                    self.update_text_box(f'本次论坛分值为:{score}')
                    self.update_running_label('论坛打分中...')
                else:
                    self.update_text_box('本学生已打过论坛分,跳过')
            except:
                pass

            # 点击下一个学生
            next_student_element = self.browser.find_element(By.XPATH, '//i[@ng-click="goToNextStudent()"]')
            if 'disabled' in next_student_element.get_attribute('class'):
                print('已经到最后一个学生')
                self.update_running_label('已到最后,请手动保存后重新开始!')
                break
            else:
                next_student_element.click()
                time.sleep(3)
                self.update_running_label('论坛打分中...')

代码解释

  1. 查找“暂无”元素: 我们使用 self.browser.find_element(By.CLASS_NAME, 'blank-message') 查找一个class名为 'blank-message' 的元素。
  2. 判断是否已评分: 如果找到了这个元素,并且它的文本内容为 '暂无',则说明该学生还没有被评分,脚本将继续执行评分操作。
  3. 跳过已评分学生: 如果该元素的文本内容不是 '暂无',则说明该学生已经被评分,脚本将跳过该学生,并通过点击“下一个学生”按钮进入下一个循环。

总结

通过添加简单的判断逻辑,我们成功地优化了 Python Selenium 自动打分脚本,使其能够跳过已评分的学生,提高了脚本的运行效率。这种方法可以应用于各种需要自动化网页操作的场景,例如自动填写表单、自动爬取数据等。

Python Selenium 自动打分脚本优化:跳过已评分学生

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

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