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

Python Selenium实现循环执行直到页脚出现指定提示的问题排查

循环逻辑核心问题分析

你代码的主要问题集中在以下几点:

  • 内层while循环未更新判断条件变量:进入while循环前你只获取了一次mensajeproximo的值,循环体中点击下一页、页面更新后,没有重新拉取页脚的最新内容赋值给mensajeproximo,导致循环判断条件永远使用初始值,要么直接跳出循环,要么进入死循环。
  • 缺少页面加载等待逻辑:每次点击提交、下一页按钮后,页面内容是动态更新的,你没有加等待逻辑就直接读取元素属性,大概率会拿到上一页的旧值,甚至直接抛出元素不存在的报错。建议使用Selenium的显式等待,等待页脚元素的文本更新后再取值判断。
  • 文本匹配规则不合理:你直接匹配innerHTML会引入HTML实体(比如 )、多余标签、空白字符的干扰,且你代码中两个提示文本的拼写存在差异(一个是don't一个是dont),很容易出现匹配失败的情况。建议改为获取元素的text属性,去除前后空白后再和目标文本比对。
  • 旧版本Selenium方法弃用:find_element_by_xpath是Selenium 3及更早版本的写法,Selenium 4+已经完全移除该API,如果你使用的是新版本Selenium,代码会直接报错无法运行,建议改为from selenium.webdriver.common.by import By后调用driver.find_element(By.XPATH, "你的XPath路径")写法。
  • 文件操作不规范:你注释掉了with open的上下文管理器写法,改为每次进入else分支单独打开文件,没有手动关闭文件,容易出现资源占用、内容未成功写入磁盘的问题。
核心逻辑修改参考

你需要调整内层while循环的逻辑,每次操作后更新判断变量,示例修改片段如下:

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

# 提前定义目标提示文本,可先打印实际获取的页脚text确认准确内容
TARGET_TIP = "?dont have more values"

# 外层遍历Excel的逻辑不变
for x in range (2,9):
    inputrut = driver.find_element(By.XPATH, '//*[@id="BodyText"]/input[1]')
    inputrut.clear()
    rutvalue=  ws.cell(row=x, column=1).value
    dvvalue= ws.cell(row=x, column=2).value
    inputrut.send_keys(str(rutvalue)+"-"+str(dvvalue))
    driver.find_element(By.XPATH, '//*[@id="MenuTable"]/tbody/tr[2]/td/input').click()
    # 等待页脚元素加载完成再取值
    foot_elem = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//*[@id="FootText"]'))
    )
    mensaje = foot_elem.text.strip()
    print(mensaje)

    if mensaje != "?don't have values":
        print(x)
        # 内层循环每次都更新判断变量
        while True:
            current_tip = foot_elem.text.strip()
            if current_tip == TARGET_TIP:
                break
            print("next "+current_tip)
            extractvalues(driver)
            # 点击下一页
            driver.find_element(By.XPATH, '//*[@id="MenuTable"]/tbody/tr[3]/td/input').click()
            # 等待页脚文本更新
            WebDriverWait(driver, 10).until(EC.staleness_of(foot_elem))
            foot_elem = WebDriverWait(driver, 10).until(
                EC.presence_of_element_located((By.XPATH, '//*[@id="FootText"]'))
            )
        # 循环结束后执行下一个Excel条目的操作
        print("new value")
        driver.find_element(By.XPATH, '//*[@id="MenuTable"]/tbody/tr[3]/td/input').click()
    else:
        # 用with open管理文件操作
        with open("Output.txt", "a", encoding="utf-8") as text_file:
            text_file.write(f"{rutvalue}-{dvvalue}NO REGISTRA\n")
        print("no values")
        driver.find_element(By.XPATH, '//*[@id="MenuTable"]/tbody/tr[3]/td/input').click() 

内容的提问来源于stack exchange,提问作者Luis Germán Orrego Campano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:09:00