селен в python: NoSuchElementException: сообщение: нет такого элемента: невозможно найти элемент - PullRequest
0 голосов
/ 23 ноября 2018

Я попытался набрать «abc» в первом блоке id и «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: Сообщение: такого элемента нет: Невозможноlocate element: {"method": "id", "selector": "id"}

пожалуйста.помоги мне ^^

Ответы [ 5 ]

0 голосов
/ 23 ноября 2018

Поля username и password находятся в пределах frame, поэтому вам необходимо:

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

0 голосов
/ 23 ноября 2018

Сайт, к которому вы пытаетесь получить доступ, не имеет элемента с идентификатором имени тега.Внимательно изучите сайт.

<input name="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()
0 голосов
/ 23 ноября 2018

Нет такого элемента Исключение обычно возникает, когда веб-драйвер не видит элемент, над которым вы пытаетесь выполнить действие.Причиной может быть:

  1. Ваш ID или Имя или Xpath или CssSelector могут быть неправильными.

  2. Ваш элемент может быть внутри фрейма, так чтоВеб-драйвер не может увидеть или обнаружить его. Переключение на iframe через Selenium и python

  3. Ваш элемент требует времени для появления в пользовательском интерфейсе, поэтому вы можете использовать явное ожидание для решения этой проблемы.https://selenium -python.readthedocs.io / waits.html
0 голосов
/ 23 ноября 2018

Это в кадре, который вам нужно переключиться в первую очередь.Кроме того, по возможности используйте идентификаторы, так как они быстрее.

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()
0 голосов
/ 23 ноября 2018

Добавьте явное ожидание

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

Здесь я ожидаю, что ваши локаторы верны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...