Python获取列表索引作为f-string变量解决Selenium点击报错
错误根因
你遇到的TypeError: '>' not supported between instances of 'str' and 'int'来自三个核心逻辑问题:
- 你拆分文本拿到的
plätze是字符串类型,全程没有做整数转换就直接和整数0做大小比较,两种类型无法直接比对 - 三层循环属于无效冗余逻辑:第二个循环把
verf3反复覆盖成单个字符串值,到第三个循环时verf3已经是列表最后一个字符串,循环实际在遍历这个字符串的单个字符,完全不是你预期的整组数值 - 拼接XPath用到的变量
y全程没有定义,就算解决了类型问题也会触发变量不存在的报错
最简实现方案
你需要的「直接获取列表索引作为变量拼XPath、免去额外索引类型转换」的需求,直接用enumerate就能完全满足:enumerate返回的索引本身就是整数类型,不需要任何字符串转整数的处理,直接放进f-string就能拼接表达式。
额外注意XPath里表格行的位置计数是从1开始的,给enumerate传入start=1参数就能直接匹配DOM的位置规则,连索引偏移计算都可以省掉。
完整修正代码如下:
# 如果你用Selenium 4+版本,需要导入By,旧版本可以保留原来的find_elements_by_xpath写法 from selenium.webdriver.common.by import By # 定位目标列的所有单元格 T3 = browser.find_elements( By.XPATH, "//*[@id='tabelle_merkliste']/tbody/tr[position()<25]/td[10]/img/following::td[2]" ) # 直接遍历拿行索引+对应单元格,索引从1开始计数,匹配XPath的tr位置规则 for row_index, cell in enumerate(T3, start=1): cell_text = cell.text.strip() print(f"当前行单元格文本:{cell_text}") # 拆分文本并直接转整数,一步完成数值提取 try: available_count = int(cell_text.split('/')[0].strip()) except (IndexError, ValueError): # 遇到文本为空、格式不符合预期的行直接跳过,避免脚本中断 print(f"第{row_index}行文本格式不符合要求,跳过") continue print(f"提取到的可用数值:{available_count}") # 满足数值条件就直接用拿到的整数索引拼XPath点击 if available_count > 0: # 注意替换下面的col_index为你实际需要点击的td列号,替换掉原来未定义的y col_index = 你实际的目标列号 browser.find_element( By.XPATH, f'//*[@id="tabelle_merkliste"]/tbody/tr[{row_index}]/td[{col_index}]/img' ).click()
关键注意点
- 不要用
list.index(值)的方式找索引,遇到列表里有重复值的时候会永远返回第一个匹配项的位置,直接点错行,用enumerate拿的索引是100%准确的 - Selenium 4及以上版本已经废弃了
find_element_by_xpath/find_elements_by_xpath这类旧API,统一用find_element(By.XXX, 定位表达式)的写法兼容性更好 - 加
strip()处理文本是为了避免网页里有多余空格、换行导致整数转换失败
内容的提问来源于stack exchange,提问作者Krischk
相关产品推荐
相关产品推荐

