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

运行Selenium代码报错:WebDriver无find_element_by_xpath属性

报错产生原因
  • Selenium 4.3.0及之后的正式版本,已经完全移除了旧版API中find_element_by_xpath、find_element_by_id等所有find_element_by_*、find_elements_by_*系列的元素定位方法。这类方法在Selenium 4早期版本中就已被标记为废弃,升级到新版本后直接调用不存在的方法,就会抛出该AttributeError异常。
  • 原有代码还存在两个会导致运行失败的隐性问题:一是表单URL中间插入了无意义的连续空格,会导致页面地址访问错误;二是XPath表达式里的"是HTML转义字符,直接写到代码里会导致XPath定位规则失效。
修复方法

优先推荐适配新版Selenium的标准写法,不需要降级依赖,兼容性更好:

  1. 先从Selenium的common模块导入定位类型类By
  2. 将所有旧版find_element_by_xxx(定位表达式)的写法,统一替换为find_element(By.XXX, 定位表达式)的格式
  3. 修正URL中的多余空格、XPath里错误的转义字符
  4. 可以用Selenium自带的隐式等待替代固定时长的time.sleep(),避免页面加载速度波动导致元素定位失败,也能减少不必要的等待时间

修复后的可运行完整代码:

from selenium import webdriver
from selenium.webdriver.common.by import By

test = webdriver.Chrome()
# 移除URL中间的多余空格
test.get('https://docs.google.com/forms/d/e/1FAIpQLSeYUmAYYZNtbU8t8MRxwJo-d1zkmSaEHodJXs78RzoG0yFY2w/viewform')

# 设置隐式等待,最长等待10秒直到目标元素加载完成
test.implicitly_wait(10)

Name = 'kuch bhi'
# 替换为新版定位写法,修正XPath中转义的引号为正常双引号
last = test.find_element(By.XPATH, '//*[@id="mG61Hd"]/div[2]/div/div[2]/div[1]/div/div/div[2]/div/div[1]/div/div[1]/input')
last.send_keys(Name)

如果暂时不想修改原有代码逻辑,也可以选择降级Selenium到最后一个支持旧版定位方法的版本,在终端执行以下命令即可:

pip install selenium==4.2.0

注意:不推荐长期使用降级方案,旧版本Selenium不再提供功能更新和安全修复,和高版本Chrome浏览器也可能存在兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:33:59