如何通过Selenium Python获取AWS SSO凭据

如何通过Selenium Python获取AWS SSO凭据,python,amazon-web-services,selenium,command-line-interface,Python,Amazon Web Services,Selenium,Command Line Interface,因此,我所在的组织使用了一个流程,我们必须从AWS SSO控制台中获取以下内容: AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_SESSION_TOKEN= 我的第一个想法是尝试使用Curl,但是有一个重定向,因为它是通过SAML集成到我们的G-Suite组织的,创建LDAP连接。因此,我唯一的想法就是使用selenium登录、获取输出并登录。不幸的是,由于OAuth工作流的发生方式,我在通过有效负载选项时遇到了问题 我的总体目标是自动化 登录 单

因此,我所在的组织使用了一个流程,我们必须从AWS SSO控制台中获取以下内容:

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_SESSION_TOKEN=
我的第一个想法是尝试使用Curl,但是有一个重定向,因为它是通过SAML集成到我们的G-Suite组织的,创建LDAP连接。因此,我唯一的想法就是使用selenium登录、获取输出并登录。不幸的是,由于OAuth工作流的发生方式,我在通过有效负载选项时遇到了问题

我的总体目标是自动化

  • 登录
  • 单击鼠标右键可执行特定操作
  • 单击SSO控制台应用程序
  • 复制访问密钥、机密访问密钥和会话令牌,然后将其写入文件
  • 我可以毫无问题地注入用户名,但不能使用ID、Name和XPATH元素注入密码。以下是python回溯:

    rbarrett@MacBook-专业的 ~/项目/米兰提斯/火车 python scrape_creds.py 1.↵  3201 13:06:17
    该文件不存在
    [, ]
    https://mirantis.awsapps.com/start/#/
    回溯(最近一次呼叫最后一次):
    文件“scrape_creds.py”,第99行,在
    password=browser。通过xpath(“/*[@id='password']”)查找元素
    文件“/usr/local/lib/python3.8/site packages/selenium/webdriver/remote/webdriver.py”,第394行,按xpath查找元素
    返回self.find_元素(by=by.XPATH,value=XPATH)
    文件“/usr/local/lib/python3.8/site packages/selenium/webdriver/remote/webdriver.py”,第976行,在find_元素中
    返回self.execute(Command.FIND_元素{
    文件“/usr/local/lib/python3.8/site packages/selenium/webdriver/remote/webdriver.py”,第321行,在execute中
    self.error\u handler.check\u响应(响应)
    文件“/usr/local/lib/python3.8/site packages/selenium/webdriver/remote/errorhandler.py”,第242行,在check_响应中
    引发异常类(消息、屏幕、堆栈跟踪)
    selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“/*[@id='password']]”
    (会话信息:chrome=86.0.4240.75)
    
    代码如下:

    rbarrett@MacBook-专业的 ~/项目/米兰提斯/火车 猫刮擦信用卡 ✔  3206 13:25:30
    #!/bin/python
    # ===========================================================
    #创作人:理查德·巴雷特
    #组织:米兰蒂斯
    #部门:客户成功
    #用途:AWS SSO凭证刮取
    #日期:2020年1月10日
    # ===========================================================
    进口硒
    进口舒蒂尔
    导入xlsxwriter
    导入操作系统
    导入单元测试
    导入请求
    导入子流程
    导入getpass
    导入平台
    导入日志记录
    导入时间
    从selenium导入webdriver
    从selenium.webdriver.chrome.options导入选项
    从selenium.webdriver.common.by导入
    从selenium.webdriver.support将预期的_条件导入为EC
    从selenium.webdriver.support.ui导入WebDriverWait
    起始日期时间导入日期
    decrypt=“gpg--output secrets\u test.json--decrypt secrets.gpg”
    如果os.path.exists(“secrets.gpg”):
    返回的_值=subprocess.call(decrypt,shell=True)
    其他:
    打印(“文件不存在”)
    导入json
    以open('secrets.json','r')作为f:
    config=json.load(f)
    r=requests.get('http://'+'mirantis.awsapps.com/start#/'))
    印刷(r.历史)
    打印(r.url)
    #定义
    #按名称查找元素
    #通过xpath查找元素
    #通过链接文本查找元素
    #通过部分链接文本查找元素
    #按标签名称查找元素
    #按类名称查找元素
    #通过\u css\u选择器查找\u元素\u
    #系统变量
    今天=日期。今天()
    日期=今天.strftime(“%m/%d/%Y”)
    node=platform.node()
    system=platform.system()
    username=getpass.getuser()
    version=platform.version()
    当前目录=os.getcwd()
    #URL变量
    登录https://mirantis.awsapps.com/start#/'
    #检查Chrome的版本
    #选择权
    #options=webdriver.ChromeOptions()
    #options.add_参数(“download.default_directory=current_directory”,“--headless”)
    #系统的WebDriver路径
    如果platform.system()==('Windows'):
    browser=webdriver.Chrome(“C:\ProgramFiles(x86)\Google\Chrome\chromedriver.exe”)
    elif platform.system()==('Linux'):
    browser=webdriver.Chrome(可执行文件路径='/home/rbarrett/Drivers/Google/Chrome/chromedriver')
    elif platform.system()==('Darwin'):
    browser=webdriver.Chrome(可执行文件路径='/Users/rbarrett/Drivers/Google/Chrome/chromedriver')
    其他:
    打印(“您确定已将Selenium Webdriver安装在正确的路径中吗?”)
    #父URL
    browser.get(“https://mirantis.awsapps.com/start#/")
    时间。睡眠(10)
    #凭证需要单元测试
    #电子邮件XPATH/html/body/div[1]/div[1]/div[2]/div/div/div[2]/div/div/div[1]/div/form/span/section/div/div/div[1]/div/div/div[1]/div/div[1]/input
    #电子邮件标识ID
    用户名=浏览器。通过id(“identifierId”)查找元素
    用户名。发送密钥(配置['user']['name'])
    #单击下一步
    #下一个按钮ID XPATH/*[@ID='identifierNext']/div/Button/span
    element=WebDriverWait(浏览器,20)。直到(
    EC.元素可点击((By.ID,“identifierNext”))
    元素。单击();
    #密码有效载荷
    #密码XPTAH/*[@id='Password']
    password=browser。通过xpath(“/*[@id='password']”)查找元素
    密码。发送密钥(配置['user']['password'])
    #单击下一步
    #下一个按钮XPATH//*[@id=“passwordNext”]/div/Button/div[2]
    #element=WebDriverWait(浏览器,20)。直到(
    #EC.element可点击((By.ID,“passwordNext”))
    #元素。单击();
    #时间。睡眠(15)
    #身份验证提交。单击()
    #对于XPATH=//门户应用程序
    #element=WebDriverWait(浏览器,20)。直到(
    #EC.element可点击((By.XPATH,//portal application)))
    #元素。单击();
    #打印(“为列车打开AWS SSO!”)
    
    问题是密码没有得到应有的注入。 这是因为Windows开关吗?也许有更好的方法