Selenium运行时触发InvalidArgumentException错误的解决求助
解决Selenium的InvalidArgumentException(无效定位器)错误
你的问题出在元素定位写法错误上:driver.find_element("_yb_nuzqf")这种调用方式不符合Selenium的API要求,直接触发了"invalid locator"(无效定位器)错误。
错误根源
Selenium的find_element方法必须明确指定定位策略(比如通过ID、CSS选择器、XPATH等)和对应的定位值。你只传了定位值,没告诉Selenium用什么规则去找元素,所以被判定为无效参数。
修正方案
有两种常用的修正写法:
方法1:导入By类,明确指定定位策略
先导入By类,通过By.ID指定以元素ID为定位依据:
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By # 新增导入By类 import time path = r"C:\...\chromedriver.exe" driver = webdriver.Chrome(path) driver.get('https://www.yahoo.com') # 修正:指定定位策略为ID search = driver.find_element(By.ID, "_yb_nuzqf") search.send_keys("test") search.send_keys(Keys.RETURN) time.sleep(5) driver.quit()
方法2:使用Selenium 4+支持的关键字参数写法
如果你的Selenium版本是4.0及以上,可直接用关键字参数指定定位方式,代码更简洁:
from selenium import webdriver from selenium.webdriver.common.keys import Keys import time path = r"C:\...\chromedriver.exe" driver = webdriver.Chrome(path) driver.get('https://www.yahoo.com') # 修正:用id关键字参数指定定位值 search = driver.find_element(id="_yb_nuzqf") search.send_keys("test") search.send_keys(Keys.RETURN) time.sleep(5) driver.quit()
额外提示
如果修正后仍找不到元素,大概率是页面未加载完成。建议用显式等待替代固定时长的time.sleep,提升稳定性:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待元素加载完成,最多等待10秒 search = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "_yb_nuzqf")) )
内容的提问来源于stack exchange,提问作者SirRudington
相关产品推荐
相关产品推荐

