从本地DB获取OTP的双因子认证自动化脚本需求咨询
自动化登录实现脚本
技术栈说明
- 浏览器自动化:Selenium
- 数据库连接:以MySQL为例,使用pymysql驱动,其他数据库可替换为对应驱动包
- 依赖安装命令:
pip install selenium pymysql webdriver-manager
完整实现代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from webdriver_manager.chrome import ChromeDriverManager import pymysql # 从数据库获取预存静态OTP码 def get_static_otp_from_db(): # *以下数据库连接参数需替换为实际业务配置* db_conn = pymysql.connect( host="你的数据库地址", user="数据库用户名", password="数据库密码", database="存储OTP的库名", port=3306 ) cursor = db_conn.cursor() # *SQL查询语句需替换为实际OTP存储表结构对应的查询逻辑* cursor.execute("SELECT otp_code FROM user_otp WHERE user_account = '你的登录用户名' LIMIT 1") otp_code = cursor.fetchone()[0] db_conn.close() return str(otp_code) def auto_login(): # 初始化Chrome浏览器 driver = webdriver.Chrome(ChromeDriverManager().install()) # *替换为实际登录页地址* driver.get("https://你的应用登录页地址") wait = WebDriverWait(driver, 10) try: # 第一步:输入用户名密码并点击登录 # *以下元素选择器需替换为实际页面对应元素的定位规则* username_input = wait.until(EC.presence_of_element_located((By.ID, "username_input_id"))) password_input = driver.find_element(By.ID, "password_input_id") login_btn = driver.find_element(By.ID, "login_btn_id") # *替换为实际登录账号密码* username_input.send_keys("你的登录用户名") password_input.send_keys("你的登录密码") login_btn.click() # 第二步:获取OTP并填入校验 otp_input = wait.until(EC.presence_of_element_located((By.ID, "otp_input_id"))) static_otp = get_static_otp_from_db() otp_input.send_keys(static_otp) # 提交OTP校验 otp_submit_btn = driver.find_element(By.ID, "otp_submit_btn_id") otp_submit_btn.click() # 校验是否登录成功,可根据实际页面登录成功后的特征元素判断 wait.until(EC.presence_of_element_located((By.ID, "登录后首页的特征元素ID"))) print("登录成功") except Exception as e: print(f"登录流程出错:{str(e)}") finally: # 按需设置是否自动关闭浏览器 # driver.quit() pass if __name__ == "__main__": auto_login()
注意事项
- 页面元素的定位规则(ID、XPATH、CSS_SELECTOR等)需要根据实际应用前端页面的实际情况调整
- 若使用的不是MySQL数据库,只需替换
get_static_otp_from_db函数中的数据库连接逻辑即可 - 可根据实际需求添加登录成功后的后续业务操作逻辑
内容的提问来源于stack exchange,提问作者praveenpaulraj
相关产品推荐
相关产品推荐

