如何通过Selenium Python获取AWS SSO凭据
因此,我所在的组织使用了一个流程,我们必须从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_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_SESSION_TOKEN=
我的第一个想法是尝试使用Curl,但是有一个重定向,因为它是通过SAML集成到我们的G-Suite组织的,创建LDAP连接。因此,我唯一的想法就是使用selenium登录、获取输出并登录。不幸的是,由于OAuth工作流的发生方式,我在通过有效负载选项时遇到了问题
我的总体目标是自动化
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开关吗?也许有更好的方法