Проблема при отправке ключей на сайт с помощью Selenium с Python - PullRequest
0 голосов
/ 22 апреля 2020

Целью является отправка имени пользователя и пароля на страницу входа на веб-сайт. Ссылка не может быть предоставлена ​​по соображениям конфиденциальности.

Для этого я пробовал использовать селекторный подход Xpath и CSS. Тем не менее, каждый метод дает мне разные ошибки.

Например, использование подхода xpath, как показано ниже;

user_id =self.browser.find_elements_by_xpath("//[@id='tcl_MainContentPlaceHolder_tcl_Username']")
user_id.send_keys( 'username' )

user_pw = self.browser.find_elements_by_xpath("//*=[@id='tcl_MainContentPlaceHolder_tcl_Password']")
user_pw.send_keys( '12345678' )

выдаст ошибку;

AttributeError: 'list' object has no attribute 'send_keys'

Принимая во внимание, что с помощью селектора CSS, как показано ниже;

user_id= WebDriverWait( self.browser, 20 ).until(EC.presence_of_element_located( (By.CSS_SELECTOR, 'tcl_MainContentPlaceHolder_tcl_Username.form-control.input-lg') ) )

user_id.send_keys( 'username' )

выдаст ошибку

selenium.common.exceptions.TimeoutException: Message: 

Я поиграл с другим xpath & css путем, но, он не дает лучшего результата.

Полный html / путь к каждому из поля имени пользователя и пароля приведен ниже;

Имя пользователя

<div class="form-group m-b-tcl">
 <input name="tcl$MainContentPlaceHolder$tcl$Username" type="text" 
 id="tcl_MainContentPlaceHolder_tcl_Username" class="form-control input-lg" 
 placeholder="Username" autocomplete="off">
 <span id="tcl_MainContentPlaceHolder_tcl_UserNameRequired" 
  style="color:#CC0011;visibility:hidden;"></span>
</div> 

Пароль

<div class="form-group m-b-tcl">
 <span id="tcl_MainContentPlaceHolder_ctl00_PasswordRequired" 
 style="visibility:hidden;"></span>  <input name="tcl$MainContentPlaceHolder$ctl00$Password" 
 type="password" id="tcl_MainContentPlaceHolder_tcl_Password" 
 class="form-control input-lg" placeholder="Password">
</div>

Я действительно ценю, если кто-то может показать, где я поступил неправильно. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 22 апреля 2020
AttributeError: 'list' object has no attribute 'send_keys'

Вы получаете эту ошибку, потому что find_elements_by_xpath возвращает список. Вам следует попробовать find_element_by_xpath

user_id =self.browser.find_elements_by_xpath("//[@id='tcl_MainContentPlaceHolder_tcl_Username']")

Кроме того, Xpath не является допустимым выражением, поскольку вы не указываете искомый тег. Попробуйте следующее:

user_id =self.browser.find_element_by_xpath("//input[@id='tcl_MainContentPlaceHolder_tcl_Username']")
user_id.send_keys( 'username' )

user_pw = self.browser.find_element_by_xpath("//input[@id='tcl_MainContentPlaceHolder_tcl_Password']")
user_pw.send_keys( '12345678' )
1 голос
/ 22 апреля 2020

find_elements_by_xpath() вернется в виде списка. Вам нужно изменить его find_element_by_xpath(), который вернется в качестве webelement.

user_id =self.browser.find_element_by_xpath("//[@id='tcl_MainContentPlaceHolder_tcl_Username']")
user_id.send_keys( 'username' )

Для второго ваш селектор css неправильный. Для вас необходимо добавить # при использовании селектора css.

user_id= WebDriverWait( self.browser, 20 ).until(EC.presence_of_element_located( (By.CSS_SELECTOR, '#tcl_MainContentPlaceHolder_tcl_Username.form-control.input-lg') ) )
user_id.send_keys( 'username' )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...