【发布时间】:2021-02-04 12:29:23
【问题描述】:
我正在尝试使用 Python 和 Selenium 登录 Azure DevOps。我可以很好地输入用户名和密码,但我手机上的 Microsoft Authenticator 应用程序设置为在尝试登录时提示我“批准”或“拒绝”。
我尝试让 Selenium 等到保持登录页面上的“否”按钮元素出现(见下面的屏幕截图), 但它似乎不喜欢它。我看了一下this post,它是关于 Google 的 Authenticator 的。该解决方案使用 Google Authenticator 的密钥以及 pyotp。我似乎无法找到从 MS Authenticator 获取秘密的方法,至少对我自己而言。我查看了this 指南,但我无权访问 Azure AD。
这是我尝试在 2FA 之后等待屏幕的代码:
def signin(user, passwd):
# find elements before passing information
username = browser.find_element_by_name('loginfmt')
username.send_keys(user)
username.send_keys(Keys.ENTER)
time.sleep(1)
password = browser.find_element_by_name('passwd')
password.send_keys(passwd)
password.send_keys(Keys.ENTER)
try:
WebDriverWait(browser, 60).until(
EC.element_to_be_clickable((By.ID, "idBtn_Back"))
).click()
finally:
sys.exit('Timeout for 2FA approval reached. Try again.')
不幸的是,正如我上面简要提到的,即使出现保持登录页面后,Python 也无法检测到“否”按钮。我真的不在乎使用哪个按钮,因为脚本使用的是我未登录的浏览器的单独实例。
我考虑过设置一个很长的time.sleep() 命令,但这似乎是一种非常愚蠢的做法。有人有什么建议吗?
【问题讨论】:
-
链接到网站?
-
@Yatin URL 是
https://<companyName>.visualstudio.com/,但您会立即被重定向到登录页面,例如 -https://login.microsoftonline.com/9fdf2c7e-d190-4b8e-ba6b-2cd9be62632e/oauth2/authorize?client_id=<client_id and other sensitive information>
标签: python selenium two-factor-authentication