You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Selenium实现AWS SSO登录自动化

Selenium实现AWS SSO登录自动化方案

前置准备

  • 提前下载和本地浏览器版本完全匹配的Selenium WebDriver,版本不匹配会直接导致浏览器启动失败
  • 拿到你的AWS SSO专属登录入口,一般格式为https://[自定义SSO前缀].awsapps.com/start
  • 提前确认你的SSO全链路校验规则:是纯账号密码登录,还是需要叠加MFA验证,对接的IdP(Okta、Azure AD、企业自建AD等)有没有开启人机校验

核心实现逻辑

  1. 初始化WebDriver实例,配置合理的显式等待时长,打开SSO登录起始页
  2. 定位用户名输入框,填入SSO账号后提交,等待页面跳转到密码输入环节
  3. 定位密码输入框,填入对应密码后提交,进入MFA校验环节时做分支处理:如果是TOTP软令牌验证,可以提前保存TOTP密钥,用工具实时生成6位动态码填入;如果是硬件密钥、短信验证码、人机验证类校验,加人工操作等待逻辑,不要硬写自动化逻辑
  4. 校验通过跳转到SSO应用列表页后,定位目标AWS账户下对应权限角色的控制台入口,点击跳转即完成控制台登录,后续所有控制台操作直接复用当前WebDriver实例即可
  5. 要避免每次启动都重复登录输MFA的话,可以在第一次登录成功后导出浏览器cookie存储到本地,下次启动WebDriver时优先导入本地存储的cookie,直接跳过登录流程

Python版最简实现示例

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
import pyotp  # 用于生成TOTP动态验证码,无MFA场景可不用安装

# 初始化Chrome驱动,使用其他浏览器替换为对应驱动即可
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)  # 配置10秒最长显式等待,比固定sleep更稳定

# 打开SSO起始页
sso_url = "替换为你的AWS SSO登录入口地址"
driver.get(sso_url)

# 填写用户名提交
username_input = wait.until(EC.presence_of_element_located((By.ID, "username")))
username_input.send_keys("替换为你的SSO用户名")
driver.find_element(By.ID, "signin-button").click()

# 填写密码提交
password_input = wait.until(EC.presence_of_element_located((By.ID, "password")))
password_input.send_keys("替换为你的SSO密码")
driver.find_element(By.ID, "signin-button").click()

# TOTP MFA校验逻辑,无MFA可删除该段
mfa_secret = "替换为你的TOTP软令牌密钥"
current_code = pyotp.TOTP(mfa_secret).now()
mfa_input = wait.until(EC.presence_of_element_located((By.ID, "mfacode")))
mfa_input.send_keys(current_code)
driver.find_element(By.ID, "submit-mfa-button").click()

# 登录成功后点击目标角色的控制台入口
# 注意:不同SSO配置下元素选择器存在差异,运行前打开F12核对当前页面的定位规则
console_btn = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "div[data-testid='account-card'] a.console-link")))
console_btn.click()

# 到这一步已经完成登录跳转至AWS控制台,后续操作直接基于driver对象实现即可

常见踩坑说明

  • 不要全靠固定time.sleep()控制流程节奏,优先用Selenium自带的显式等待判断目标元素加载完成再执行操作,既可以避免网络波动导致的元素找不到报错,也不会在页面加载快的时候白白浪费等待时间
  • AWS SSO的前端页面会不定期迭代,元素ID、类名、CSS选择器可能发生变化,如果运行代码时抛出元素不存在的错误,第一时间打开浏览器开发者工具核对当前页面的元素定位路径,不要直接照搬网上的旧选择器
  • 如果你的SSO流程对接的IdP开启了滑块、点选类人机验证,纯原生Selenium基本无法自动通过,要么在代码里加断点等待人工完成验证后再继续执行,要么在测试环境给你的固定出口IP加白名单、给测试账号关闭额外验证,不用浪费时间折腾纯自动过验证码的方案,投入产出比极低
  • 所有登录凭证(用户名、密码、TOTP密钥)不要硬编码在代码里,优先通过环境变量、本地加密配置文件读取,避免凭证意外提交到代码仓库造成泄露

内容的提问来源于stack exchange,提问作者Pratik Pathare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 17:27:51