【问题标题】:Selenium Python - Chrome doesn't autofill username and password fields when in headless modeSelenium Python - Chrome 在无头模式下不会自动填充用户名和密码字段
【发布时间】:2021-03-21 22:07:08
【问题描述】:

正如标题所说,我在使用 Google Chrome 的自动填充功能时遇到了问题。当我在没有 --headless 参数的情况下运行我的 Python 脚本时,一切都很顺利:Chrome 会自动填写用户名和密码字段,然后我就可以登录了。但是,当我尝试在无头模式下运行 Chrome 时,它​​什么也没做。有没有办法解决/规避这个问题?我想只使用send_keys(),但我不想将我的电子邮件和密码放在我电脑上的脚本中。谢谢!

[编辑]

这是我的登录代码:

login = WebDriverWait(driver, 10).until( 
            EC.element_to_be_clickable((By.ID, 'login-button')) 
        ) 
driver.find_element_by_id('login-button').click()

我只是等待元素变为可点击,然后点击它。正如我之前所说,这在我不处于无头模式时完全有效,但在我激活它时会中断,因为 Chrome 不会自动填充用户名和密码。

[编辑 2]

我已经通过了用户数据目录。一切正常。问题是当我添加 --headless 参数时,它会自动停止粘贴凭据。

【问题讨论】:

  • 您的代码试验和错误在哪里?元素的 HTML 代码?
  • 我没有尝试做任何事情,因为除了单击登录按钮之外我不知道该做什么,我只需调用 click() 方法即可。我正在 mi.com 上测试我的脚本。我知道 Chrome 不会在无头模式下自动填充,因为我在单击登录按钮后转储了 HTML 并看到了错误。我将使用我用于登录的代码编辑我的帖子。

标签: python selenium google-chrome headless


【解决方案1】:

您需要传入拥有自动完成信息的用户的个人资料。

这是一个可能有帮助的答案:https://stackoverflow.com/a/52399027/1387701

具体来说:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

    options = webdriver.ChromeOptions()
    options.add_argument("user-data-dir=C:\\Users\\AtechM_03\\AppData\\Local\\Google\\Chrome\\User Data\\Default")
    driver = webdriver.Chrome(executable_path=r'C:\path\to\chromedriver.exe', chrome_options=options)
    driver.get("https://www.google.com")

但是,我建议不要依赖自动完成功能进行自动化测试。您最好在命令行、环境变量或配置文件中传递用户名/密码信息。

【讨论】:

  • 我已经通过了用户数据目录,事实上它在不处于无头模式时可以完美地工作。为什么您建议不要依赖自动完成功能?不安全吗?它有时会破裂吗(就像在这种情况下)?
  • 我不认为它遵循了良好的开发实践。无法以这种方式以编程方式更改用户/密码。
  • 是的,你说得对,但我仍然很想知道为什么无头模式如此成问题。也许这是一个错误,我不知道。你有什么想法吗?
猜你喜欢
  • 2015-02-28
  • 2012-07-29
  • 1970-01-01
  • 2023-01-10
  • 2016-05-10
  • 2014-12-07
  • 2010-11-29
  • 2020-10-29
  • 2020-11-11
相关资源
最近更新 更多