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

使用Selenium/Python时for循环中else代码块为何早于if语句触发?

问题原因
  • 缩进逻辑错误:你当前代码中else子句与if match判断同级,属于循环内单条笔记的判断分支。只要第一条笔记不匹配正则,就会直接触发点击下一页的逻辑,同时break跳出循环,不会继续检查当前页剩下的9条笔记,更不会等到整页遍历完成。
  • 对Python for-else语法理解有误:for循环对应的else需要和for关键字同级缩进,只有当for循环完整遍历完所有元素、没有被break中途终止时,才会执行else块的代码,这才是你需要的「整页笔记都不匹配才点击下一页」的逻辑。
  • 额外的全局变量使用错误:isClicked函数内部修改clicked变量时没有声明global clicked,实际修改的是函数内的局部变量,全局的clicked值始终不会被更新,也会导致后续判断逻辑出错。
修正方案

你可以把重复的匹配+翻页逻辑封装成通用逻辑,不用写两次重复的循环,优化后代码参考:

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

relativeXpathNotes = "//td[2]/div"
xpathNextButton = "//div[2]/button[2]"

def is_clickable_and_click(element_xpath):
    """检查元素可点击并点击,返回是否点击成功"""
    try:
        element = WebDriverWait(driver, 3).until(EC.element_to_be_clickable((By.XPATH, element_xpath)))
        element.click()
        return True
    except:
        return False

def match_note_and_click():
    """匹配当前页的笔记,匹配成功返回True,无匹配返回False"""
    pattern = r"Anteckning vecka (\d{1,2})|Månadsanteckning"
    try:
        notes_list = WebDriverWait(driver, 40).until(EC.presence_of_all_elements_located((By.XPATH, relativeXpathNotes)))
        for note in notes_list:
            if re.search(pattern, note.text):
                print(note.text)
                note.click()
                return True
        # 只有整页遍历完没返回(没匹配到)才会走到下面
        return False
    except TimeoutException:
        print("当前页笔记加载失败")
        return False

def weekOrMonth():
    max_retry_pages = 10 # 可自行设置最大翻页次数避免死循环
    current_page = 0
    while current_page < max_retry_pages:
        current_page +=1
        # 匹配当前页笔记,成功就直接退出
        if match_note_and_click():
            return
        # 匹配失败就翻页,翻页失败也退出
        if not is_clickable_and_click(xpathNextButton):
            print("没有更多页面可翻")
            return
    print(f"已翻完{max_retry_pages}页,未找到匹配笔记")

主要修改点:

  • 把单页匹配、点击判断的逻辑分别封装成独立函数,避免重复代码
  • 用函数返回值传递状态,去掉了容易出错的全局变量
  • 增加了最大翻页次数限制,避免找不到匹配项时死循环

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 07:24:04