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

Selenium调用WebDriverWait时报错find_element参数数量不符如何解决?

问题原因

你触发报错的核心原因是expected_conditions.text_to_be_present_in_element方法的传参格式不符合要求:

  • 该方法要求第一个入参为定位器元组,格式为(定位方式, 定位表达式),你直接将By.XPATH和xpath表达式作为两个独立参数传入,导致Selenium内部调用find_element时参数拆分异常,才会出现「参数数量不匹配」的报错
  • 额外你还漏传了该方法的第二个必填参数:需要匹配的文本内容

修复方案

将WebDriverWait行的代码修改为如下格式即可:

WebDriverWait(browser,30).until(EC.text_to_be_present_in_element((By.XPATH, "//*"), "In Stock"))

如果你希望保留原来的xpath匹配逻辑,也可以换用元素存在的预期条件,写法如下:

WebDriverWait(browser,30).until(EC.presence_of_element_located((By.XPATH, "//*[contains(text(),'In Stock')]")))

修复后完整可运行代码

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

def firefoxget(url: str, file: str):
    browser = webdriver.Firefox()
    browser.get(url)
    
    # 修复后的等待逻辑
    WebDriverWait(browser,30).until(EC.text_to_be_present_in_element((By.XPATH, "//*"), "In Stock"))

    # 优化:用with上下文管理器自动处理文件关闭,避免资源泄漏
    with open(file, "w", encoding="utf-8") as f:
        f.write(browser.page_source)

    browser.close()

可选优化建议

可以给等待逻辑加异常捕获,避免超时后直接终止程序:

try:
    WebDriverWait(browser,30).until(EC.text_to_be_present_in_element((By.XPATH, "//*"), "In Stock"))
except TimeoutException:
    print("等待页面加载「In Stock」超时,请检查页面是否正常加载")
    browser.close()
    return

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:36:04