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

Selenium Python find_element正确语法及By未定义报错解决

报错原因

"By" is not defined Pylance (reportUndefinedVariable) 报错的直接原因是代码中使用了By类,但没有提前导入Selenium中对应的By模块,静态检查工具无法找到该类的定义,因此抛出未定义变量错误。
另外你现有代码中存在一处语法疏漏:driver.maximize_window是浏览器驱动的实例方法,调用时必须添加括号,否则窗口最大化逻辑不会实际执行。

修复步骤

在现有代码的导入区块补充By类的导入语句即可解决核心报错:

from selenium.webdriver.common.by import By

同时修正窗口最大化的调用写法,将driver.maximize_window改为driver.maximize_window()。

Selenium Python 环境下find_element 正确语法

Selenium 4 版本已经废弃了旧版find_element_by_id、find_element_by_xpath这类单一定位方式的方法,统一使用双参数的find_element语法:

driver.find_element(定位策略, 定位表达式)

其中定位策略通过导入的By类指定,常用的定位策略如下:

  • By.ID:匹配元素的id属性,是优先级最高的定位方式
  • By.NAME:匹配元素的name属性
  • By.XPATH:通过XPath路径表达式定位元素
  • By.CSS_SELECTOR:通过CSS选择器定位元素
  • By.CLASS_NAME:匹配元素的class属性值
  • By.TAG_NAME:匹配HTML标签名
  • By.LINK_TEXT:精确匹配<a>标签的完整文本内容
  • By.PARTIAL_LINK_TEXT:模糊匹配<a>标签的部分文本内容

修复后的登录逻辑参考代码

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
# 补全缺失的By类导入
from selenium.webdriver.common.by import By

def test_driver_manager_chrome():
    service = ChromeService(executable_path=ChromeDriverManager().install())
    driver = webdriver.Chrome(service=service)
    driver.quit()

# 初始化浏览器
driver = webdriver.Chrome()
driver.implicitly_wait(30)
# 修正方法调用,添加括号
driver.maximize_window()

# 跳转目标页面
driver.get("替换为你的目标网站实际URL")

# 登录逻辑
userID = driver.find_element(By.ID, "_58_login")
# 输入账号,替换为实际账号
userID.send_keys("你的登录账号")
# 定位密码框,替换为实际密码框的定位属性值
pwd_input = driver.find_element(By.ID, "_58_password")
pwd_input.send_keys("你的登录密码")
# 定位并点击登录按钮,替换为实际登录按钮的定位规则
login_btn = driver.find_element(By.CSS_SELECTOR, "button[type='submit']")
login_btn.click()

提示:如果需要定位多个符合规则的元素,把find_element替换为find_elements即可,方法会返回匹配到的所有元素组成的列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:09:21