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

Selenium遍历XPATH列表遇类型错误,求修复井字棋机器人代码

修复Selenium井字棋机器人的遍历循环错误

错误原因分析

触发TypeError: list indices must be integers or slices, not str是因为你在遍历XPATH数组时,错误地使用XPATH字符串作为列表索引(比如试图用xpath_list[xpath]获取元素),而列表仅支持整数或切片作为索引。

修复方案

使用enumerate()函数遍历XPATH数组,同时获取每个格子的序号和对应的XPATH;判断格子文本是否为'O'后,将序号存入已标记列表。另外加入异常处理,避免元素未加载导致的超时或报错。

修复后的完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException

# 初始化浏览器
driver = webdriver.Chrome()
driver.get("你的井字棋网页地址")

# 棋盘格子的XPATH数组
grid_xpaths = [
    "//div[@class='cell'][1]", "//div[@class='cell'][2]", "//div[@class='cell'][3]",
    "//div[@class='cell'][4]", "//div[@class='cell'][5]", "//div[@class='cell'][6]",
    "//div[@class='cell'][7]", "//div[@class='cell'][8]", "//div[@class='cell'][9]"
]
marked_indices = []  # 存储已标记为'O'的格子序号

# 遍历棋盘格子,标记已占用的位置
for idx, xpath in enumerate(grid_xpaths):
    try:
        cell_element = driver.find_element(By.XPATH, xpath)
        cell_text = cell_element.text.strip()  # 去除文本前后空白,避免误判
        if cell_text == 'O':
            marked_indices.append(idx + 1)  # 若格子序号从1开始用idx+1,从0开始则直接用idx
    except NoSuchElementException:
        # 处理格子未加载的情况,防止脚本中断
        print(f"格子{idx+1}未找到,跳过")
        continue

# 后续下棋逻辑:只选择不在marked_indices中的格子
print("已被'O'标记的格子序号:", marked_indices)

关键优化点

  1. enumerate()的使用:同时获取索引和XPATH,直接拿到格子的序号,彻底避免字符串索引的错误。
  2. 文本处理:用strip()去除文本前后的空白字符,防止格子内的空格或换行导致判断失误。
  3. 异常捕获:捕获NoSuchElementException,处理格子未加载的情况,避免脚本因元素找不到而超时或崩溃。
  4. 避免误点:后续下棋时,过滤掉marked_indices中的序号,只选择未标记的格子操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:25:32