python 中的硒:NoSuchElementException:消息:没有这样的元素:无法找到元素
selenium in python : NoSuchElementException: Message: no such element: Unable to locate element
我尝试在第一个 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: Message: no such element: Unable to locate element: {"method":"id","selector":"id"}
请。帮帮我^^
添加显式等待
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')
在这里,我希望你的定位器是正确的。
No Such Element 异常通常发生在 Web 驱动程序看不到您尝试对其执行操作的元素时。
原因可以是:
您的 ID or Name or Xpath or CssSelector 可能是错误的。
您的元素可能位于 iframe 中,因此网络驱动程序无法看到或检测到它。 Switch to an iframe through Selenium and python
- 您的元素需要时间才能出现在 UI,因此您可以使用显式等待来解决
这个。 https://selenium-python.readthedocs.io/waits.html
它在您需要先切换到的框架中。此外,尽可能使用 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()
您尝试访问的网站没有带有标签名称 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()
用户名和密码字段在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")
浏览器快照:
我尝试在第一个 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: Message: no such element: Unable to locate element: {"method":"id","selector":"id"}
请。帮帮我^^
添加显式等待
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')
在这里,我希望你的定位器是正确的。
No Such Element 异常通常发生在 Web 驱动程序看不到您尝试对其执行操作的元素时。 原因可以是:
您的 ID or Name or Xpath or CssSelector 可能是错误的。
您的元素可能位于 iframe 中,因此网络驱动程序无法看到或检测到它。 Switch to an iframe through Selenium and python
- 您的元素需要时间才能出现在 UI,因此您可以使用显式等待来解决 这个。 https://selenium-python.readthedocs.io/waits.html
它在您需要先切换到的框架中。此外,尽可能使用 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()
您尝试访问的网站没有带有标签名称 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()
用户名和密码字段在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")
浏览器快照: