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

开发Discord期权流机器人时出现IndexError及Selenium弃用警告如何解决

报错原因
  • 核心IndexError错误:你代码中的WebDriverWait(driver, 10)仅实例化了显式等待对象,未指定等待条件就直接执行后续元素查找逻辑,页面还未完成登录表单渲染时,find_elements_by_xpath会返回空列表,此时直接取_form[0]就触发了列表下标越界。报错后机器人仍能正常运行是因为该异步任务异常未被捕获终止主进程,后续重试/页面加载完成后登录逻辑可正常执行。
  • DeprecationWarning警告:你使用的是Selenium 4及以上版本,该版本已弃用find_elements_by_*系列定位方法,要求改用统一的find_elements(By.定位类型, 定位值)写法。
修复步骤
  1. 先导入Selenium必要依赖:
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
  1. 修正fetchPage函数的逻辑,补全显式等待条件、替换弃用方法、增加空列表校验:
async def fetchPage():
  global console, alreadyFetched, refreshTime, loadTime, qdPw, qdUser, all_flow, flow_check, update_count
  
  # If not logged in
  if (not alreadyFetched):
    driver.get("https://app.quantdata.us/")
    # 显式等待登录表单加载完成,最多等10秒
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//form[@name="login"]')))
    print("fetching page")
    # 替换弃用的定位方法
    _form = driver.find_elements(By.XPATH, '//form[@name="login"]')
    _inputs = driver.find_elements(By.XPATH, '//form[@name="login"]//input')
    for input in _inputs:
      n = (input.get_attribute('name'))
      if n == "username":
        input.send_keys(qdUser)
      elif n == "password":
        input.send_keys(qdPw)
    print(driver.page_source)
    # 增加空列表校验,避免下标越界
    if _form:
        _form[0].submit()
        alreadyFetched = True
    else:
        # 找不到登录表单默认已登录,避免重复执行登录逻辑
        alreadyFetched = True
  else:
    driver.refresh()
    print("Page Refreshing " + time.strftime("%I:%M:%S", time.localtime()))
  1. 可选:给refreshThread增加异常捕获逻辑,避免未处理的异步任务异常抛出:
async def refreshThread():
    global refreshTime
    while True:
        try:
            await fetchPage()
        except Exception as e:
            print(f"刷新线程异常: {str(e)}")
        await asyncio.sleep(refreshTime)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:24:00