如何使用Selenium实现AWS SSO登录自动化
Selenium实现AWS SSO登录自动化方案
前置准备
- 提前下载和本地浏览器版本完全匹配的Selenium WebDriver,版本不匹配会直接导致浏览器启动失败
- 拿到你的AWS SSO专属登录入口,一般格式为
https://[自定义SSO前缀].awsapps.com/start - 提前确认你的SSO全链路校验规则:是纯账号密码登录,还是需要叠加MFA验证,对接的IdP(Okta、Azure AD、企业自建AD等)有没有开启人机校验
核心实现逻辑
- 初始化WebDriver实例,配置合理的显式等待时长,打开SSO登录起始页
- 定位用户名输入框,填入SSO账号后提交,等待页面跳转到密码输入环节
- 定位密码输入框,填入对应密码后提交,进入MFA校验环节时做分支处理:如果是TOTP软令牌验证,可以提前保存TOTP密钥,用工具实时生成6位动态码填入;如果是硬件密钥、短信验证码、人机验证类校验,加人工操作等待逻辑,不要硬写自动化逻辑
- 校验通过跳转到SSO应用列表页后,定位目标AWS账户下对应权限角色的控制台入口,点击跳转即完成控制台登录,后续所有控制台操作直接复用当前WebDriver实例即可
- 要避免每次启动都重复登录输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
相关产品推荐
相关产品推荐

