📜  在 selenium webdriver 中从 Outlook 获取 otp 的代码 (1)

📅  最后修改于: 2023-12-03 14:51:10.339000             🧑  作者: Mango

从 Outlook 获取 OTP

在使用一些网站或者应用进行登录时,常常需要输入 OTP(一次性密码),用来增加登录的安全性。而这些 OTP 往往是通过邮件或者短信发送到用户的注册邮箱或手机上,如何在自动化测试中获取 OTP 就成了一个重要的问题。

下面介绍如何使用 Selenium WebDriver 从 Outlook 获取 OTP。

前置要求

在进行下面的操作前,需要保证已经配置好了 Outlook 邮箱,并且已经登录到 Outlook 并且关闭了自动转发功能(因为自动转发功能会影响到获取 OTP)。

获取 OTP 的主要流程
  1. 打开 Outlook 邮箱
  2. 查找最新的 OTP 邮件
  3. 从邮件内容中获取 OTP
代码实现
# 引入相关的库
from selenium import webdriver
import time

# 设置 Outlook 邮箱的地址和密码
outlook_url = "https://outlook.live.com/owa/"
outlook_email = "your outlook email"
outlook_password = "your outlook password"

# 创建 WebDriver 对象并打开 Outlook 邮箱
driver = webdriver.Chrome()
driver.get(outlook_url)

# 输入邮箱地址和密码并登录
email_input = driver.find_element_by_name("loginfmt")
email_input.send_keys(outlook_email)
submit_btn = driver.find_element_by_id("idSIButton9")
submit_btn.click()
time.sleep(3)

password_input = driver.find_element_by_name("passwd")
password_input.send_keys(outlook_password)
submit_btn = driver.find_element_by_id("idSIButton9")
submit_btn.click()
time.sleep(3)

# 查找 OTP 邮件并获取 OTP
mails = driver.find_elements_by_css_selector(".lvHighlightAllClass .lvItem")

for mail in mails:
    mail.click()
    time.sleep(3)
    subject = driver.find_element_by_css_selector(".iH > div:nth-child(1) > div:nth-child(2)").text
    if "OTP" in subject:
        otp = driver.find_element_by_css_selector("body").text.split("OTP:")[1].split("\n")[0]
        print(otp)
        break

# 关闭浏览器
driver.quit()

上述代码使用了 Chrome 浏览器,也可以使用其他的浏览器。根据自己的实际情况修改代码中的 Outlook 邮箱地址和密码。代码中的主要实现逻辑是通过查找所有的邮件,依次点击进入邮件查看内容,如果邮件标题包含了 OTP,就从邮件内容中获取 OTP。最后关闭浏览器。

总结

通过上述的代码实现,我们可以在自动化测试中方便地从 Outlook 邮箱中获取 OTP,增加登录的安全性。当然,在实际应用中,还需要考虑一些细节问题,比如如何判断 OTP 是否已经使用过等。