Selenium Chrome驱动报错无find_element_by_xpath属性无法点击按钮
问题成因
- 报错的核心原因是本地安装的Selenium依赖升级到了4.3.0及以上版本,从这个版本开始,Selenium官方正式移除了所有
find_element_by_*、find_elements_by_*系列的旧版快捷定位方法,你代码里调用的find_element_by_xpath就在移除列表里,运行时自然会抛出属性不存在的错误。 - 之前代码能正常运行,是因为此前本地装的是4.3之前的旧版本Selenium;近期突然失效,基本是执行依赖更新时没有锁定版本,自动拉取了最新版Selenium导致的。
- 额外提示:你当前使用的是从html根节点逐层写的绝对路径XPath,本身容错性极差,只要页面前端稍微调整层级结构,就算定位方法改对了,后续也很容易出现定位失败的问题。
解决方法
你可以根据自己的需求二选一:
- 临时兼容方案(不推荐长期使用):把Selenium降级到还保留旧方法的最后一个版本,执行如下命令重装依赖即可,原有代码不需要做任何修改:
pip install selenium==4.2.0 --force-reinstall
这个方案的缺点是旧版本不再获得官方维护,后续新的浏览器版本适配、bug修复都不会覆盖,长期用容易出现其他兼容问题。
- 官方推荐长期方案:适配新版Selenium的API规范,统一使用
find_element()通用定位方法,搭配内置的By类指定定位规则。- 首先在代码开头导入By类:
from selenium.webdriver.common.by import By- 把原有定位点击的代码替换为新版写法:
优化建议:后续写定位规则时尽量替换掉绝对路径XPath,优先用元素的id、固定class、可见文本、专属属性写相对定位,比如要定位的按钮文字是“确认”,可以写为driver.find_element(By.XPATH, "/html/body/div[1]/div/div/div[2]/div/div/div[2]/div[5]/button").click()driver.find_element(By.XPATH, "//button[text()='确认']"),定位稳定性会高很多。
内容的提问来源于stack exchange,提问作者Cloudy
相关产品推荐
相关产品推荐

