Selenium: ввод в текстовое поле со стилем = "отображение: нет;"

Я пытался заставить селен ввести мое имя пользователя и пароль на сайт и видел различные методы, упомянутые на других форумах, ни один из которых не работал у меня. Вот что возвращается при проверке поля «имя пользователя» на сайте:

<input type = "text" id = "curruserelt" value = "" aria-hidden = "true" style = "display: none;" class = "">

Я пытался использовать метод ID, но безрезультатно, я пробую этот метод xpath:

username = "ajusingt121"
element_enter = findElement(By.xpath("//*[@id = "curruserelt"]")).sendKeys(username);
element_enter.findElement(By.xpath("/html/body/input[1]")).sendKeys(username);

Но по какой-то причине он продолжает возвращать недопустимую синтаксическую ошибку в части идентификатора xpath.

Каков наилучший способ решения этого типа формы и входных данных?

Эта часть xpath кажется неправильной - By.xpath("//*[@id = "curruserelt"]") вместо того, чтобы заключить строку в двойные кавычки, заключить ее в одинарные кавычки, как это - By.xpath("//*[@id='curruserelt']") или наоборот с внешними двойными кавычками.

Dev 22.12.2020 18:12

Это сработало, спасибо! Но он продолжает говорить, что «findElement» не определен, на форуме ничего не упоминалось об определении findElement, поэтому мне интересно, как бы я это сделал.

mya205 22.12.2020 18:30

Конечно, вы смешиваете Java и Python findElement принадлежит Java, find_element_by_xpath() принадлежит Python.

Dev 22.12.2020 18:37

Я импортировал from selenium.webdriver.common.by import By, но все равно получаю, что find_element_by_xpath() не определено в Python

mya205 22.12.2020 18:47
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
4
911
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Selenium не сможет отправить последовательность символов в поле <input> с атрибутом style, установленным как "display: none;".

Однако вы отметили python , но ваш блок кода находится в java

В Python вы используете:

driver.find_element_by_xpath("//*[@id = "curruserelt"]").send_keys(username)

В Java вы используете:

driver.findElement(By.xpath("//*[@id = "curruserelt"]")).sendKeys(username);

Примечание. Однако есть JavaScript хаки, которые могут помочь вам добиться того же.


Обновлять

Чтобы отправить последовательность символов в поле <input>, вам необходимо удалить атрибут style, который установлен как "display: none;", и вы можете использовать любую из следующих стратегий локатора:

  • Использование css_selector:

    username = "ajusingt121"
    element = driver.find_element_by_css_selector("input#curruserelt[type='text']")
    driver.execute_script("arguments[0].removeAttribute('style')", element)
    driver.find_element_by_css_selector("input#curruserelt[type='text']").send_keys(username)
    
  • Использование xpath:

    username = "ajusingt121"
    element = driver.find_element_by_xpath("//input[@id='curruserelt' and @type='text']")
    driver.execute_script("arguments[0].removeAttribute('style')", element)
    driver.find_element_by_xpath("//input[@id='curruserelt' and @type='text']").send_keys(username)
    

Спасибо! Как мне это сделать с помощью javascript в Python?

mya205 22.12.2020 18:49

Не удалось заставить метод find_element_by_xpath работать в Python, ошибок нет, просто кажется, что он не вводит в поле на странице на основе того идентификатора, который я получил из элемента проверки поля имени пользователя.

mya205 22.12.2020 20:36

@ mya205 mya205 Как я уже сказал, вашим желаемым элементом для отправки текста будет какой-то другой элемент, по крайней мере, не этот элемент с атрибутом style, установленным как "display: none;". Я могу предоставить вам код, но это не лучшая практика.

undetected Selenium 22.12.2020 21:10

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

mya205 22.12.2020 21:46

@ mya205 Проверьте обновленный ответ и дайте мне знать статус.

undetected Selenium 22.12.2020 22:22

Другие вопросы по теме