Selenium 4.4.3报错:'WebDriver'无find_element_by_xpath属性求助
问题解决:Selenium 4.4.3 报错 AttributeError: 'WebDriver' object has no attribute 'find_element_by_xpath'
问题描述
我使用的Selenium版本为4.4.3,沿用了适用于4.3.0版本的代码,但仍出现报错:AttributeError: 'WebDriver' object has no attribute 'find_element_by_xpath'。我的代码如下:
from selenium import webdriver import time username = ' ' # 在这里修改你的用户名 password = ' ' # 在这里修改你的密码 url='https://academia.srmist.edu.in/' driver = webdriver.Chrome("./chromedriver") driver.get(url) time.sleep(2) driver.find_element_by_xpath('//*[@id="Email"]').send_keys(username) driver.find_element_by_xpath('//*[@id="Password"]').send_keys(password) time.sleep(1) driver.find_element_by_xpath('//*[@id="signinForm"]/div[6]/input').click()
原因
Selenium从4.0版本开始就弃用了find_element_by_xpath、find_element_by_id这类旧写法,后续版本(包括4.3.0和4.4.3)都正式移除了这些方法,统一改用find_element()配合By类的语法。
修复方案
步骤1:导入By类
在代码开头添加By类的导入:
from selenium.webdriver.common.by import By
步骤2:替换旧的元素定位写法
把所有driver.find_element_by_xpath('xxx')替换为driver.find_element(By.XPATH, 'xxx')。
步骤3:简化驱动初始化(可选但推荐)
Selenium 4.4.0及以上版本支持自动管理ChromeDriver,无需手动指定驱动路径,直接写driver = webdriver.Chrome()即可。
修复后的完整代码
from selenium import webdriver from selenium.webdriver.common.by import By import time username = ' ' # 在这里修改你的用户名 password = ' ' # 在这里修改你的密码 url='https://academia.srmist.edu.in/' # Selenium 4.4+ 自动管理驱动,无需指定路径 driver = webdriver.Chrome() driver.get(url) time.sleep(2) driver.find_element(By.XPATH, '//*[@id="Email"]').send_keys(username) driver.find_element(By.XPATH, '//*[@id="Password"]').send_keys(password) time.sleep(1) driver.find_element(By.XPATH, '//*[@id="signinForm"]/div[6]/input').click()
进阶优化(可选)
用显式等待替代time.sleep(),可以让代码更稳定,避免因页面加载慢导致的元素找不到问题:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC username = ' ' # 在这里修改你的用户名 password = ' ' # 在这里修改你的密码 url='https://academia.srmist.edu.in/' driver = webdriver.Chrome() driver.get(url) # 等待邮箱输入框加载完成,最多等待10秒 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, '//*[@id="Email"]')) ).send_keys(username) # 等待密码输入框加载完成 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, '//*[@id="Password"]')) ).send_keys(password) # 等待登录按钮加载完成并点击 WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, '//*[@id="signinForm"]/div[6]/input')) ).click()
内容的提问来源于stack exchange,提问作者AKELLA SRI RAM RA2011027010093
相关产品推荐
相关产品推荐

