#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:
но когда я пытаюсь запустить код, он показывает мне это:
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 способа обеспечить ожидание —
- Использование sleep()
time.sleep(20) username = driver.find_element_by_xpath('//input[@name="session[username_or_email]"]')
- Явное ожидание
wait=new WebDriverWait(driver, 20) username = wait.until(expected_conditions.presence_of_element_located(By.xpath( "//input[@name='session[username_or_email]']")))
- Неявное ожидание
driver.implicitly_wait(20) username = driver.find_element_by_xpath('//input[@name="session[username_or_email]"]')