使用Selenium WebDriver登录网页时如何安全存储多组凭证?
替代硬编码登录凭证的最佳实现方案
问题背景
需要用Selenium WebDriver登录网页下载PDF,涉及两组登录凭证,当前采用硬编码方式,希望替换为更安全的实现。
原硬编码代码示例
if __name__ == '__main__': ooffice=[SECRET EXPUNGED] luser=[SECRET EXPUNGED] lpassword=[SECRET EXPUNGED] muser=[SECRET EXPUNGED] mpassword=[SECRET EXPUNGED] logname="log.txt" today=datetime.datetime.now() with open(logname, 'a+') as f: f.write("{}: program started \n".format(datetime.datetime.now())) for i in range(3): try: with open(logname, 'a') as f: f.write("{}: downloading first document, try:{} \n".format(datetime.datetime.now(),i+1)) simpledownload(ooffice,luser,lpassword) break except Exception as Argument: with open(logname, 'a') as f: f.write(str(Argument)) f.write("\n") for i in range(3): try: simpledownload(ooffice,muser,mpassword) with open(logname, 'a') as f: f.write("{}: downloading second document, try:{} \n".format(datetime.datetime.now(),i+1)) break except Exception as Argument: with open('output.txt', 'a') as f: f.write(str(Argument)) f.write("\n")
推荐的安全实现方案
1. 使用环境变量
将凭证存储在系统环境变量中,代码读取环境变量获取值,避免明文暴露在代码里。
实现代码:
import os import datetime if __name__ == '__main__': ooffice = os.getenv('O_OFFICE') luser = os.getenv('L_USER') lpassword = os.getenv('L_PASSWORD') muser = os.getenv('M_USER') mpassword = os.getenv('M_PASSWORD') # 后续逻辑保持不变...
设置环境变量方式:
- Windows(命令行):
set L_USER=your_username、set L_PASSWORD=your_password - Linux/macOS(终端):
export L_USER=your_username、export L_PASSWORD=your_password
优缺点:简单易实现,适合本地测试或服务器部署;缺点是环境变量会在进程列表中短暂可见,不适合高度敏感场景。
2. 使用配置文件
将凭证存放在单独的JSON/YAML配置文件中,无需硬编码到代码内。
示例:JSON配置文件(config.json)
{ "ooffice": "your_office_value", "credentials": [ {"user": "l_user", "password": "l_password"}, {"user": "m_user", "password": "m_password"} ] }
代码读取配置文件:
import json import datetime if __name__ == '__main__': with open('config.json', 'r') as f: config = json.load(f) ooffice = config['ooffice'] luser = config['credentials'][0]['user'] lpassword = config['credentials'][0]['password'] muser = config['credentials'][1]['user'] mpassword = config['credentials'][1]['password'] # 后续逻辑保持不变...
将config.json加入.gitignore,避免提交到代码仓库;敏感场景可使用cryptography库对配置文件加密。
优缺点:管理灵活,适合多环境配置;需额外处理文件权限,防止未授权访问。
3. 使用系统密钥管理工具(keyring库)
借助操作系统自带的密钥链(Windows Credential Manager、macOS Keychain、Linux Secret Service)存储密码,通过keyring库读取。
安装依赖:
pip install keyring
先设置凭证到密钥链(仅需执行一次):
import keyring # 设置第一组凭证 keyring.set_password("pdf_downloader", "l_user", "l_password") # 设置第二组凭证 keyring.set_password("pdf_downloader", "m_user", "m_password") # 设置ooffice值(如果需要) keyring.set_password("pdf_downloader", "ooffice", "your_office_value")
代码读取凭证:
import keyring import datetime if __name__ == '__main__': ooffice = keyring.get_password("pdf_downloader", "ooffice") luser = "l_user" lpassword = keyring.get_password("pdf_downloader", luser) muser = "m_user" mpassword = keyring.get_password("pdf_downloader", muser) # 后续逻辑保持不变...
优缺点:安全性高,密码存储在系统加密密钥链中;缺点是跨平台配置需适配不同系统密钥管理工具。
内容的提问来源于stack exchange,提问作者Omar Morales Rivera
相关产品推荐
相关产品推荐

