Не удается найти элемент: // ввод[@name=»session[username_or_email]»] с помощью python

#python #html #selenium

#python #HTML #selenium

Вопрос:

Я новичок, когда дело доходит до selenium и веб-очистки в целом, и сегодня я пытался следовать руководству по selenium, где они используют команду:

 from selenium import webdriver

driver = webdriver.Firefox()
driver.get("https://twitter.com/home")
username = driver.find_element_by_xpath('//input[@name="session[username_or_email]"]')
 

чтобы найти входной тег в html страницы входа в Twitter:
фрагмент из html страницы входа в Twitter

но когда я пытаюсь запустить код, он показывает мне это:

 raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: //input[@name="session[username_or_email]"]
 

Что я делаю не так?

Комментарии:

1. это означает, что элемент, который вы ищете, не существует, пожалуйста, поделитесь ссылкой на веб-сайт, который вы хотите удалить, чтобы я мог помочь вам лучше?

2. Я просмотрел страницу входа в Twitter и с помощью инструментов разработки Firefox убедился, что ваш xpath должен найти элемент. Можете ли вы поделиться кодом, приводящим к этому утверждению?

3. Не могли бы вы вставить весь свой код? Поиск этого элемента с помощью xpath работает для меня, когда я нахожусь на странице входа в Twitter. Может быть, вы не на странице входа в систему?

4. @Richard, спасибо за попытку помочь, я отредактировал сообщение, чтобы код теперь отображался полностью. Кроме этого, я нашел add, если у меня было time.sleep(5) перед определением имени пользователя, тогда он работает отлично.

Ответ №1:

Попробуйте предоставить какой-нибудь оператор ожидания, чтобы найти элемент. Существует 3 способа обеспечить ожидание —

  1. Использование sleep()
      time.sleep(20)
     username = 
     driver.find_element_by_xpath('//input[@name="session[username_or_email]"]')
     
  2. Явное ожидание
     wait=new WebDriverWait(driver, 20)
    username = wait.until(expected_conditions.presence_of_element_located(By.xpath( 
    "//input[@name='session[username_or_email]']")))
     
  3. Неявное ожидание
      driver.implicitly_wait(20)
     username = 
     driver.find_element_by_xpath('//input[@name="session[username_or_email]"]')