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
相关产品推荐
相关产品推荐

