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
相关产品推荐
相关产品推荐

