Как передать логин с помощью selenium с несколькими классами

#python #selenium #selenium-webdriver #selenium-chromedriver

#python #selenium #selenium-webdriver #selenium-chromedriver

Вопрос:

Я пытаюсь передать имя пользователя и пароль на страницу входа в систему, которая имеет структуру из нескольких классов.

Я пробовал различные решения XPATH, но не смог заставить их работать для этого примера. Вот HTML-код сайтов. Если кто-нибудь может помочь, это будет с благодарностью. Спасибо.

 
<div class="hm-HeaderModule_UserAdmin ">
<div class="hm-Login ">

<div class="hm-Login_UserNameWrapper ">
<input type="text" class="hm-Login_InputField ">
<div class="hm-Login_InputText ">Join Now</div></div>

<div class="hm-Login_PasswordWrapper ">
<input type="text" class="hm-Login_InputField ">
<input type="password" class="hm-Login_InputField Hidden ">
<button tabindex="0" class="hm-Login_LoginBtn ">GO</button>
<div class="hm-Login_InputText ">Lost Login?</div></div></div></div>

  

Оба текстовых поля для ввода имени пользователя и пароля расположены в hm-Login_InputField

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

1. Какой код вы пробовали до сих пор? Какое сообщение об ошибке вы получаете?

Ответ №1:

Попробуйте использовать CSS Selector , что намного быстрее.Используется WebdriverWait для обработки элемента.

 from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium import webdriver

driver=webdriver.Chrome()
driver.get("url here")

wait=WebDriverWait(driver,20)
userele=wait.until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR,'div.hm-Login_PasswordWrapper input.hm-Login_InputField[type="text"]')))
userele.send_keys('xyz@gmail.com')
passwdele=wait.until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR,'div.hm-Login_PasswordWrapper input.hm-Login_InputField.Hidden[type="password"]')))
passwdele.send_keys('xxxxxxxxxxx')
btnelement=wait.until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR,'div.hm-Login_PasswordWrapper button.hm-Login_LoginBtn')))

btnelement.click()
  

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

1. Спасибо за вашу помощь! Я не смог заставить это работать точно для примера, но могу понять предпосылку и сделаю еще одну попытку, спасибо.

2. Спасибо за ваше решение, однако поле пароля не получает команду send_keys из-за оболочки, содержащей текст и скрытое поле пароля в одном и том же поле. Я попытался сначала щелкнуть поле пароля, а затем отправить ключи скрытому элементу, однако по-прежнему ничего не появляется. У вас есть какие-нибудь мысли? Спасибо

Ответ №2:

Пожалуйста, проверьте ниже XPath, используя следующий-sibling

 Username (XPath) - //div[@class='class="hm-Login_PasswordWrapper']/following-sibling::input[1]
Password (XPath) - //div[@class='class="hm-Login_PasswordWrapper']/following-sibling::input[2]
  

Примечание — Пожалуйста, проверьте пространство в конце оболочки <div class="hm-Login_PasswordWrapper ">

Ответ №3:

Во-первых, проверьте, находятся ли поля имени пользователя и пароля внутри фрейма, если они находятся внутри IFrame, переключитесь на него, а затем выполните, это случилось со мной однажды, когда я пропустил часть фреймов, поэтому надеюсь, что это поможет вам 🙂