You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python自动化脚本循环执行失效问题求助:循环仅执行一次即停止

排查Selenium循环仅执行一次的问题

看起来你的循环只跑一次就停,大概率是执行过程中抛出了未捕获的异常(比如找不到元素),导致脚本直接终止。先看看你代码里的几个明显问题,再给你修复方案:

你的代码里的冗余&风险点

driver.find_element_by_class_name("submit").click()
x = driver.find_element_by_class_name("submit").click()  # 这行完全多余!click()返回None,赋值给x毫无意义
for x in range(100):
    time.sleep(0.1)
    driver.find_element_by_xpath("//input[@value='Continue >>']").click()
    time.sleep(2.5)
    driver.find_element_by_xpath("//a[contains(.,'Restart Battle')]").click()
    print(x)
  1. 第二行的x = driver.find_element_by_class_name("submit").click()纯粹是冗余代码,而且click()方法返回None,这行除了占用资源没任何作用。
  2. 固定的time.sleep()非常不可靠——如果页面加载慢一点,元素还没渲染出来你就去点击,直接会抛出NoSuchElementException,脚本直接停掉,这就是你循环只跑一次的核心原因。
  3. 没有任何异常捕获机制,一旦某一步出错,整个脚本直接终止。

修复后的代码(带异常处理+显式等待)

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 初始的submit点击(只需要一次)
driver.find_element_by_class_name("submit").click()

# 执行100次循环
for loop_num in range(1, 101):
    print(f"正在执行第 {loop_num} 次循环")
    try:
        # 显式等待「Continue >>」按钮可点击,最多等10秒
        continue_btn = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//input[@value='Continue >>']"))
        )
        continue_btn.click()

        # 显式等待「Restart Battle」链接可点击,最多等10秒
        restart_btn = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//a[contains(.,'Restart Battle')]"))
        )
        restart_btn.click()

    except Exception as e:
        print(f"第 {loop_num} 次循环出错: {str(e)}")
        # 可选:保存错误截图,方便排查页面状态
        driver.save_screenshot(f"error_screenshot_{loop_num}.png")
        # 出错后继续下一次循环,而不是终止脚本
        continue

关键改进点说明

  • 去掉冗余代码:删掉了无意义的x = driver.find_element_by_class_name("submit").click()。
  • 用显式等待替代固定sleep:显式等待会主动轮询页面,直到元素可点击才会执行操作,比硬等时间要可靠得多,避免页面加载延迟导致的元素定位失败。
  • 添加异常捕获:即使某次循环中出现元素找不到、页面跳转异常等问题,脚本也会打印错误信息后继续下一次循环,不会直接终止,方便你定位具体是哪一步出了问题。
  • 更清晰的循环计数:把循环变量改成loop_num,从1开始计数,打印的时候更直观。

额外排查方向

如果修复后还是有问题,你可以检查这几点:

  • 页面点击后是否弹出了新窗口/弹窗?如果有,需要用driver.switch_to.window()切换窗口,或者处理弹窗后再继续定位元素。
  • 元素的XPATH是否正确?有时候页面动态渲染,元素的属性(比如value、文本)会有细微变化,你可以用浏览器开发者工具重新验证XPATH的有效性。
  • 目标元素是否在iframe里?如果是,需要先执行driver.switch_to.frame()切换到对应iframe,才能定位到里面的元素。

内容的提问来源于stack exchange,提问作者pocket monster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 14:22:33