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

Selenium WebDriver无find_element_by_link_text属性报错解决方法

问题根因

报错和代码逻辑、Chrome/Chromedriver配置无关,是Selenium版本自动升级后旧API被移除导致的。
Selenium 4.3.0及以上版本正式删除了所有find_element_by_*系列简写定位方法,包括你用到的find_element_by_link_text、find_element_by_class_name、find_element_by_id等。Google Colab每次重置运行环境后,执行无版本号的pip install selenium会默认安装最新版Selenium,你首次运行时环境预装的是4.3.0以下的旧版本,次日重连环境后自动安装了新版,调用已删除的旧方法就会抛出AttributeError。
代码中driver.title能正常返回页面标题,已经说明浏览器驱动初始化、页面访问流程完全正常,故障点仅在元素定位的API调用环节。

修复方案

两种方案选其一即可:

方案1:固定Selenium版本(零代码修改快速修复)

将Selenium安装命令指定为兼容旧API的版本,原有业务代码不需要做任何改动即可运行:

!pip install selenium==4.2.0
!apt-get update 
!apt install chromium-chromedriver

from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver',options=chrome_options)

driver.get("https://petrowiki.spe.org/PetroWiki")
driver.title

peh = driver.find_element_by_link_text('Pet. Eng. Handbook')
peh.click()

方案2:适配新版Selenium标准API(长期维护推荐)

不降级Selenium版本,改用官方后续长期维护的统一find_element接口,配合By类声明定位方式,避免后续版本迭代再出现API兼容问题。
修正后的完整代码:

!pip install selenium
!apt-get update 
!apt install chromium-chromedriver

from selenium import webdriver
from selenium.webdriver.common.by import By
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver',options=chrome_options)

driver.get("https://petrowiki.spe.org/PetroWiki")
driver.title

peh = driver.find_element(By.LINK_TEXT, 'Pet. Eng. Handbook')
peh.click()

其余旧定位方法的替换规则统一如下:

  • find_element_by_id(val) → find_element(By.ID, val)
  • find_element_by_class_name(val) → find_element(By.CLASS_NAME, val)
  • find_element_by_xpath(val) → find_element(By.XPATH, val)
  • find_element_by_css_selector(val) → find_element(By.CSS_SELECTOR, val)
  • find_element_by_name(val) → find_element(By.NAME, val)
  • find_element_by_tag_name(val) → find_element(By.TAG_NAME, val)
  • find_element_by_partial_link_text(val) → find_element(By.PARTIAL_LINK_TEXT, val)
    如果是定位多个元素的find_elements_by_*系列方法,替换逻辑完全一致,仅需将方法名替换为find_elements即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:22:04