python中的硒:NoSuchElementException:消息:没有这样的元素:无法找到元素

时间:2018-11-23 06:34:45

标签: python selenium selenium-webdriver frame webdriverwait

我尝试在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')

但是低于错误

  

NoSuchElementException:消息:没有这样的元素:无法找到元素:{“ method”:“ id”,“ selector”:“ id”}

请。帮帮我^^

6 个答案:

答案 0 :(得分:1)

明确添加等待

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')

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

答案 1 :(得分:1)

当Web驱动程序看不到您要对其执行操作的元素时,通常不会出现此类元素异常。 原因可能是:

  1. 您的ID或名称或Xpath或CssSelector可能是错误的。

  2. 您的元素可能位于iframe中,因此Web驱动程序无法看到或检测到它。 Switch to an iframe through Selenium and python

  3. 您的元素需要花费一些时间才能出现在UI上,因此您可以使用显式等待来解决 这个。 https://selenium-python.readthedocs.io/waits.html

答案 2 :(得分:1)

它在框架中,您需要先切换到该框架。另外,请尽可能使用ID,因为ID更快。

var d = new double[] { -0.05, 0.0, 0.05};

答案 3 :(得分:1)

您尝试访问的网站没有带有标签名称ID的元素。仔细检查站点。

<input name="id">

如果输入具有id值,请尝试此操作;

driver.find_element_by_id("id")

示例用法:

HTML:

<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>

Python:

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()

答案 4 :(得分:0)

用户名密码字段位于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")
    
  • 浏览器快照:

sugang_korea_ac_kr

答案 5 :(得分:0)

我有同样的错误。

已打开Web浏览器,键入了用户名和密码,但未提交“提交”按钮。

我遇到了相同的错误,阅读了所有解决方案,并意识到我的代码是通过submit()提交的

driver.find_element_by_id('loginButton').submit()

我将其更改为click(),问题已解决。

driver.find_element_by_id('loginButton').click()