Подскажите Python + Selenium, как залогинеться на Yandex

Не получается, подскажите, что прописать или за что зацепиться в поле “Пароль”.
Лог прошел по классу, а вот пароль и по классу и по всем другим критериям не получается.

Как пробовали искать? Какой тип локатора использовали? Напишите ваш вариант поиска?

2 лайка

Как обычно F12. На скрине видно же. А как еще можно?

Наверное, я не совсем понял вопрос. Уточню. Вы какой тип локатора используете: xpath, css и т.д.? По идее ваш вариант поиска должен выглядеть что-то, вроде: //input[@name = “passwd”]… Или как у вас это выглядит и почему вы не можете указать свой элемент?

1 лайк

Вот песня и он не поется на пароле (валится).

from selenium import webdriver
from selenium.webdriver.common.by import By

mail = webdriver.Chrome(‘C:\Chromedriver_win32\chromedriver’)
mail.get(‘https://yandex.ru’)
account = mail.find_element(By.LINK_TEXT, “Войти в почту”)
account.click()
user = mail.find_element(By.CLASS_NAME, “passport-Input-Controller”)
user.send_keys(“name@yandex.ru”)
passwd = mail.find_element(By.CLASS_NAME, “passport-Input-Label”)
passwd.send_keys(“****”)
button = mail.find_element(By.CLASS_NAME, “passport-Button-Text”)
button.click()

А почему именно по классу ищите?

1 лайк

button = mail.find_element(By.XPATH, ‘//input[@name=“passwd” and @type=“password”’])

1 лайк

А с какой ошибкой падает?

я на коленке накидал по быстрому с использованием selene:

from selene.api import *
from selenium import webdriver

browser.set_driver(webdriver=webdriver.Chrome())

login_element = s('[name="login"]')
password_element = s('[name="passwd"]')
submit_element = s('[type="submit"]')
error_element = s('.passport-Domik-Form-Error')
email_entrance = s('[data-statlog="notifications.mail.logout.domik.login.big"]')


def login_with(login, password):
    browser.open_url('https://yandex.ru')
    email_entrance.click()
    login_element.set(login)
    password_element.set(password)
    submit_element.click()
    error_element.should(have.text('Такого аккаунта нет'))
    browser.close()


if __name__ == '__main__':
    login_with('opop@ololo.com', 'mysecretpassword')

всё работает…
у меня ощущение, что проблема скорее всего в ожиданиях…
попробуйте запустить, selene сам ждёт и на падения скриншоты делает - в стектрейсе будет ссылка.

1 лайк
  1. оба поля “логин” и “пароль” имеют один и тот же класс “passport-Input-Controller”. А локатор элемента должен быть уникальным, поэтому вам не стоит находить элемент по его классу в данном случае.
  2. локатор поля “логин” неверный, т.к. даже из названия класса видно что это лейбл. В лейбл не введешь текст. Вам нужен элемент input на самом деле
1 лайк

Спасибо большое, буду пробывать, что получится отпишусь.