selenium自动登录中始终显示“密码错误”消息

2024-10-05 15:22:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用下面发布的代码,使用Selenium自动化duolingo登录。 虽然一开始一切正常,但在点击登录按钮后,我总是在网站上收到一条“密码错误”的消息。 我一次又一次地检查密码,甚至将其更改为没有特殊字符的密码,但登录仍然失败。 我在其他示例中看到,有时会有一个额外的密码输入字段,但是在检查html时找不到

我会错过什么

(旁注:我也愿意接受一个完全不同的解决方案,没有webdriver,因为我真的只想访问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


Tags: divcom密码inputbyemailhtmldriver
1条回答
网友
1楼 · 发布于 2024-10-05 15:22:53

切换到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")

vs:

email_input = driver.find_element_by_xpath('//input[@data-test="email-input"]')

相关问题 更多 >