Я пытаюсь автоматизировать вход в систему duolingo с помощью Selenium с кодом, опубликованным ниже. Хотя сначала кажется, что все работает так, как ожидалось, я всегда получаю сообщение «Неверный пароль» на веб-сайте после нажатия кнопки входа в систему. Я снова и снова проверял пароль и даже менял его на пароль без специальных символов, но все равно вход в систему не выполняется. В других примерах я видел, что иногда есть дополнительное поле для ввода пароля, однако я не могу его найти при просмотре html.

Что я мог упустить?

(Боковое примечание: я также открыт для совершенно другого решения без веб-драйвера, поскольку я действительно хочу попасть на страницу duolingo.com/learn только для очистки некоторых данных, но пока я не нашел альтернативного способа авторизоваться)

Используемый код:

from selenium import webdriver
from time import sleep

url = "https://www.duolingo.com/"


def login():
    driver = webdriver.Chrome()
    driver.get(url)

    sleep(2)

    hve_acnt_btn = driver.find_element_by_xpath("/html/body/div/div/div/span[1]/div/div[1]/div[2]/div/div[2]/a")
    hve_acnt_btn.click()

    sleep(2)

    email_input = driver.find_element_by_xpath("/html/body/div[1]/div[3]/div[2]/form/div[1]/div/label[1]/div/input")
    email_input.send_keys("email@email.com")

    sleep(2)

    pwd_input = driver.find_element_by_css_selector("input[type=password]")
    pwd_input.clear()
    pwd_input.send_keys("password")

    sleep(2)

    login_btn = driver.find_element_by_xpath("/html/body/div[1]/div[3]/div[2]/form/div[1]/button")
    login_btn.click()

    sleep(5)

login() 

Мне не удалось опубликовать html веб-сайта из-за ограничения на количество символов, поэтому вот ссылка на страницу duolingo: Duolingo

0
NoobyJane 16 Апр 2020 в 15:20

1 ответ

Лучший ответ

Переключитесь на Firefox или браузер, который автоматически не сообщает странице, что вы ее посещаете. См. Мой предыдущий ответ по очень похожей проблеме здесь: https://stackoverflow.com/a/57778034/8375783

Короче говоря: когда вы запустите Chrome, он будет работать с navigator.webdriver=true. Вы можете проверить это в консоли. Страницы могут обнаружить этот флаг и заблокировать вход в систему или другие действия, следовательно, неверный вход. Это флаг только для чтения, установленный браузером во время запуска.

В Chrome я тоже не мог войти в Duolingo. После того, как я переключил драйвер на Firefox, тот же самый код просто работал.

Также, если я могу порекомендовать, попробуйте использовать Xpath с атрибутами.

Вместо этого:

hve_acnt_btn = driver.find_element_by_xpath("/html/body/div/div/div/span[1]/div/div[1]/div[2]/div/div[2]/a")

Ты можешь использовать:

hve_acnt_btn = driver.find_element_by_xpath('//*[@data-test="have-account"]')

То же самое касается:

email_input = driver.find_element_by_xpath("/html/body/div[1]/div[3]/div[2]/form/div[1]/div/label[1]/div/input")

Против:

email_input = driver.find_element_by_xpath('//input[@data-test="email-input"]')
1
Trapli 16 Апр 2020 в 19:13