python:Selenium 4.47 编码新的写法

pip install selenium

pip show selenium

Name: selenium

Version: 4.47.0

Summary: Official Python bindings for Selenium WebDriver

Home-page: https://www.selenium.dev

Selenium报错:'WebDriver' object has no attribute 'find_element_by_id'

原因

Selenium 4.3.0及以上版本已经彻底移除 了 find_element_by_id()、find_element_by_xpath()、find_element_by_class_name() 这一类 by_* 的方法。

旧写法已经废弃,不再支持。

❌ 旧写法(会报错)

python 复制代码
# 已经废弃!
driver.find_element_by_id("username")
driver.find_element_by_xpath("//div")
driver.find_element_by_class_name("box")
driver.find_elements_by_id("xxx")

✅ 新写法(统一使用find_element,配合By类)

需要导入:from selenium.webdriver.common.by import By

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

# 通过id查找
elem = driver.find_element(By.ID, "username")

# xpath
elem = driver.find_element(By.XPATH, "//div[@class='item']")

# class name
elem = driver.find_element(By.CLASS_NAME, "box")

# css选择器
elem = driver.find_element(By.CSS_SELECTOR, ".content")

# name属性
elem = driver.find_element(By.NAME, "password")

# 查找多个元素 find_elements (带s)
elems = driver.find_elements(By.CLASS_NAME, "list-item")

By类支持的定位方式

定位方式 写法
id By.ID
xpath By.XPATH
class By.CLASS_NAME
css选择器 By.CSS_SELECTOR
name属性 By.NAME
标签名tag By.TAG_NAME
链接文本 By.LINK_TEXT
部分链接文本 By.PARTIAL_LINK_TEXT

常见坑

  1. 忘记导入By :直接写driver.find_element("id","xxx")也可以,不推荐,可读性差
python 复制代码
# 也能运行,但建议用By常量
driver.find_element("id", "username")
  1. 网上很多老教程还是旧API,复制过来直接报错。

  2. 如果你的代码大量是旧方法,不想全部改,可以降级selenium版本(不推荐)

bash 复制代码
pip install selenium==4.2.0

建议改成新标准写法,新版本有更好的等待、调试能力。

完整示例

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://example.com")

# 定位id为search的输入框
search_input = driver.find_element(By.ID, "search")
search_input.send_keys("selenium")

driver.quit()
相关推荐
ss27329 分钟前
AI全栈实战 | 3.2-01 Python 基础:四大数据容器怎么选,推导式为什么是 Pythonic 的灵魂
开发语言·人工智能·python
计算机毕业编程指导师40 分钟前
【大数据毕设选题推荐】基于Spark的WTA职业网球赛事演变与竞技格局分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·python·计算机·spark·毕业设计·课程设计·wta网球
言乐61 小时前
Python区分广度优先深度优先宽度优先的区别
python·算法·深度优先·广度优先·宽度优先
打工仔折腾 AI1 小时前
LLaMA 1 到 LLaMA 3 架构演进拆解:从 RoPE、GQA 到词表扩张
人工智能·后端·python·深度学习·langchain·llama
旋生万物2 小时前
螺旋角分布的功率谱分析:多窗谱 + FDR 校正
开发语言·python
专业程序开发源2 小时前
SSM校园拍摄交流服务平台36936-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·php·课程设计
wuyk5552 小时前
Python 网络爬虫入门到实战 第 04 章:请求头、UA 伪装、超时、异常处理、基础反爬绕过
开发语言·爬虫·python
kaiyou20262 小时前
用户研究岗秋招,统计分析能力怎么学习和证明?
数据库·python·学习
weixin_440730503 小时前
装饰器decorator总结(函数即是变量、高阶函数、嵌套函数、参数组)
python·装饰器
零基础1233 小时前
LLM Agent 驱动的物模型构建:从设备手册到边缘接入的自动化实践
运维·人工智能·经验分享·python·自动化