Selenium NoSuchElementException求助:无法定位username元素
解决Selenium无法定位OrangeHRM用户名输入框的问题
错误信息
Traceback (most recent call last): File "C:\Users\Moga Road Carrier\PycharmProjects\pythonProject\day1\firstTestCase.py", line 9, in <module> term = driver.find_element(By.NAME, "username") # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Moga Road Carrier\PycharmProjects\pythonProject\venv\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 861, in find_element return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"] # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Moga Road Carrier\PycharmProjects\pythonProject\venv\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 444, in execute self.error_handler.check_response(response) File "C:\Users\Moga Road Carrier\PycharmProjects\pythonProject\venv\Lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 249, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[name="username"]"} # (Session info: chrome=109.0.5414.75) Stacktrace: Backtrace: # (No symbol) [0x0107F243] # (No symbol) [0x01007FD1] # (No symbol) [0x00EFD04D] # (No symbol) [0x00F2C0B0] # (No symbol) [0x00F2C22B] # (No symbol) [0x00F5E612] # (No symbol) [0x00F485D4] # (No symbol) [0x00F5C9EB] # (No symbol) [0x00F48386] # (No symbol) [0x00F2163C] # (No symbol) [0x00F2269D] GetHandleVerifier [0x01319A22+2655074] GetHandleVerifier [0x0130CA24+2601828] GetHandleVerifier [0x01128C0A+619850] GetHandleVerifier [0x01127830+614768] # (No symbol) [0x010105FC] # (No symbol) [0x01015968] # (No symbol) [0x01015A55] # (No symbol) [0x0102051B] BaseThreadInitThunk [0x75EAFA29+25] RtlGetAppContainerNamedObjectPath [0x776A7B5E+286] RtlGetAppContainerNamedObjectPath [0x776A7B2E+238]
原代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service serv_obj = Service("C:\\Drivers\\chromedriver_win32\\chromedriver.exe") driver = webdriver.Chrome(service=serv_obj) driver.get('https://opensource-demo.orangehrmlive.com/') driver.maximize_window() term = driver.find_element(By.NAME, "username") term.clear() term.send_keys("Admin")
问题原因
代码执行速度快于页面加载速度,调用driver.find_element时,用户名输入框还未完成渲染,导致无法定位元素。
解决方法
使用Selenium的显式等待,等待元素可交互后再执行操作,确保元素已完全加载。
修改后的代码:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC serv_obj = Service("C:\\Drivers\\chromedriver_win32\\chromedriver.exe") driver = webdriver.Chrome(service=serv_obj) driver.get('https://opensource-demo.orangehrmlive.com/') driver.maximize_window() # 等待最多10秒,直到用户名输入框可交互 term = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.NAME, "username")) ) term.clear() term.send_keys("Admin")
额外检查项
- 确认ChromeDriver版本与Chrome浏览器版本匹配(当前Chrome版本为109.0.5414.75,需下载对应版本的ChromeDriver)
- 检查页面是否有弹窗、广告遮挡元素,若有需先处理弹窗
内容的提问来源于stack exchange,提问作者Narinder Garg
相关产品推荐
相关产品推荐

