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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:25:00