Python中的 selenium 元素:“无此类元素异常:消息:没有此元素:找不到元素””

chhkpiq4  于 2022-11-24  发布在  Python
关注(0)|答案(5)|浏览(205)

我试着在ID的第一个块中键入“abc”,在密码的第二个块中键入“cdef”。
但是,底部的错误代码出现。

from selenium import webdriver
driver.get('http://sugang.korea.ac.kr')

我添加了一个隐式等待,以防止代码在页面完全加载之前执行。
driver.implicitly_wait(30)
添加用户名和密码的代码如下:
driver.find_element_by_name('id').send_keys('abc')driver.find_element_by_name('pw').send_keys('cdef')
但我得到以下错误:
无此类元素异常:消息:没有此元素:找不到元素:{“方法”:“id,““选择器”:“id”}

5ssjco0h

5ssjco0h1#

没有这样的元素异常通常发生在web驱动程序无法看到您尝试对其执行操作的元素时。原因可能是:
1.您的ID、名称、Xpath或CssSelector可能错误。
1.您的元素可能位于iframe内,因此Web驱动程序无法看到或检测到它。Switch to an iframe through Selenium and python
1.您的元素在UI上显示需要一段时间,因此您可以使用显式等待来解决此问题。https://selenium-python.readthedocs.io/waits.html

wbrvyc0a

wbrvyc0a2#

  • username* 和 password 字段位于frame中,因此您必须:
  • 引发 WebDriverWait,等待所需的 * 框架可用并切换到该框架 *。
  • 引发 WebDriverWait,以使所需的 * 元素可单击 *。
  • 您可以使用下列解决方案:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Firefox(executable_path=r'C:\\Utility\\BrowserDrivers\\geckodriver.exe')
driver.get("http://sugang.korea.ac.kr")
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME,"firstF")))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.input_login[name='id']"))).send_keys('abc')
driver.find_element_by_css_selector("input.input_login[name='pw']").send_keys("cdef")
  • 浏览器快照:

qq24tv8q

qq24tv8q3#

显式添加等待

from selenium.webdriver.support import expected_conditions as EC

userNameElement= WebDriverWait(driver, 2).until(
EC.presence_of_element_located((By.NAME, "id"))
userNameElement.send_keys('abc')

pwdElement= WebDriverWait(driver, 2).until(
EC.presence_of_element_located((By.NAME, "pwd"))
pwdElement.send_keys('cdef')

在这里,我希望你的定位器是正确的。

t9eec4r0

t9eec4r04#

它在一个你需要先切换到的帧中。另外,在可能的情况下使用id,因为它们更快。

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

url ="http://sugang.korea.ac.kr"
driver = webdriver.Chrome()
driver.get(url)
WebDriverWait(driver,5).until(EC.visibility_of_element_located((By.CSS_SELECTOR,'[name=firstF]')))
driver.switch_to.frame(driver.find_element_by_css_selector('[name=firstF]'))
WebDriverWait(driver,5).until(EC.visibility_of_element_located((By.ID,'id'))).send_keys('abc')
driver.find_element_by_id('pw').send_keys('def')
driver.find_element_by_id('loginButton').click()
uyhoqukh

uyhoqukh5#

您尝试访问的网站不包含具有标记名称ID的元素。请仔细检查该网站。

<input name="id">

如果输入有id值,尝试以下操作;

driver.find_element_by_id("id")

使用示例:
于飞:

<div class="form-group">
    <input class="form-control" name="username">
</div>
<div class="form-group">
    <input class="form-control" name="password" type="password">
</div>
<button id="btn-login"  type="submit">Enter</button>

巨蟒:

username = driver.find_element_by_name("username")
password = driver.find_element_by_name("password")

username.send_keys("your_username")
password.send_keys("your_password")

driver.find_element_by_id("btn-login").click()

相关问题