Я пытался заставить селен ввести мое имя пользователя и пароль на сайт и видел различные методы, упомянутые на других форумах, ни один из которых не работал у меня. Вот что возвращается при проверке поля «имя пользователя» на сайте:
<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.
Каков наилучший способ решения этого типа формы и входных данных?
Это сработало, спасибо! Но он продолжает говорить, что «findElement» не определен, на форуме ничего не упоминалось об определении findElement, поэтому мне интересно, как бы я это сделал.
Конечно, вы смешиваете Java и Python findElement
принадлежит Java, find_element_by_xpath()
принадлежит Python.
Я импортировал from selenium.webdriver.common.by import By
, но все равно получаю, что find_element_by_xpath()
не определено в Python
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?
Не удалось заставить метод find_element_by_xpath
работать в Python, ошибок нет, просто кажется, что он не вводит в поле на странице на основе того идентификатора, который я получил из элемента проверки поля имени пользователя.
@ mya205 mya205 Как я уже сказал, вашим желаемым элементом для отправки текста будет какой-то другой элемент, по крайней мере, не этот элемент с атрибутом style
, установленным как "display: none;"
. Я могу предоставить вам код, но это не лучшая практика.
Если бы вы могли, это было бы очень полезно, потому что я совершенно не понимаю, как действовать дальше. Когда я нажимаю F12, а затем щелкаю поле имени пользователя, это то, что показал мне элемент проверки, что еще я должен искать, потому что ничего больше не выделяется элементом проверки.
@ mya205 Проверьте обновленный ответ и дайте мне знать статус.
Эта часть xpath кажется неправильной -
By.xpath("//*[@id = "curruserelt"]")
вместо того, чтобы заключить строку в двойные кавычки, заключить ее в одинарные кавычки, как это -By.xpath("//*[@id='curruserelt']")
или наоборот с внешними двойными кавычками.