Selenium报错InvalidArgumentException:无效定位器问题求助
问题:Selenium通过类名定位元素时抛出InvalidArgumentException错误
尝试使用Selenium从网页中通过类名获取元素,编写了如下代码:
import os from selenium import webdriver def launchBrowser(): os.environ['PATH'] += r"/SeleniumDrivers/chromedriver_mac_arm64" driver = webdriver.Chrome() #driver.implicitly_wait(15) driver.get("https://www.geeksforgeeks.org/find_element_by_id-driver-method-selenium-python/") element = driver.find_element("class_name", "header-main_wrapper") #element = driver.find_element_by_xpath("//div[@class=bp3-button bp3-minimal]") #link = element.get_attribute("href") #link.click() while(True): pass launchBrowser()
调试时执行element = driver.find_element("class_name", "header-main_wrapper")会抛出错误:
selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: invalid locator
解决方法
错误核心原因是Selenium 4及以上版本中,find_element()方法不再支持直接传入字符串类型的定位器名称(如"class_name"),必须使用By类提供的常量。
具体修改步骤:
- 导入
By类,补充到Selenium的导入语句中:
from selenium.webdriver.common.by import By
- 替换定位器参数,将字符串"class_name"改为
By.CLASS_NAME:
element = driver.find_element(By.CLASS_NAME, "header-main_wrapper")
修改后的完整代码:
import os from selenium import webdriver from selenium.webdriver.common.by import By def launchBrowser(): os.environ['PATH'] += r"/SeleniumDrivers/chromedriver_mac_arm64" driver = webdriver.Chrome() driver.implicitly_wait(15) # 取消注释,确保元素加载完成 driver.get("https://www.geeksforgeeks.org/find_element_by_id-driver-method-selenium-python/") element = driver.find_element(By.CLASS_NAME, "header-main_wrapper") #element = driver.find_element_by_xpath("//div[@class='bp3-button bp3-minimal']") # 补充:XPath写法需给类名加引号 #link = element.get_attribute("href") #link.click() while(True): pass launchBrowser()
额外提示:
- 取消注释
driver.implicitly_wait(15)可让驱动在找不到元素时等待15秒,避免因页面未加载完成导致的定位失败。 - 注释中的XPath语句存在小问题:类名参数需要用引号包裹,正确写法是
//div[@class='bp3-button bp3-minimal']。
内容的提问来源于stack exchange,提问作者Vikram Kumar
相关产品推荐
相关产品推荐

