运行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的标准写法,不需要降级依赖,兼容性更好:
- 先从Selenium的common模块导入定位类型类
By - 将所有旧版
find_element_by_xxx(定位表达式)的写法,统一替换为find_element(By.XXX, 定位表达式)的格式 - 修正URL中的多余空格、XPath里错误的转义字符
- 可以用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
相关产品推荐
相关产品推荐

