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

Python+Selenium网站自动登录:避免明文存储密码的可行方案

解决Selenium脚本明文存密码的几种可行方案

嘿,针对你不想在Selenium登录脚本里明文存储密码的需求,我整理了几个实用又安全的方案,每个都能直接适配你的现有代码:

1. 利用系统环境变量

这是最轻量化的方案,把账号密码存到系统环境变量里,脚本只负责读取,完全不会出现在代码文件中。

操作步骤:

  • Windows:打开命令提示符,执行 set USER_NAME=你的用户名 和 set USER_PWD=你的密码
  • Linux/macOS:打开终端,执行 export USER_NAME=你的用户名 和 export USER_PWD=你的密码

修改后的脚本:

from selenium import webdriver
import time
import os

driver = webdriver.Firefox()
driver.get("https://reddit.com")

uname = driver.find_element_by_name("user")
pword = driver.find_element_by_name("passwd")
button = driver.find_element_by_class_name("btn")

time.sleep(0.5)
uname.send_keys(os.getenv("USER_NAME"))
pword.send_keys(os.getenv("USER_PWD"))
button.click()

2. 使用独立配置文件

把账号密码存到单独的JSON/YAML配置文件里,脚本读取这个文件即可。记得把配置文件加入版本控制的忽略列表(比如.gitignore),防止误提交到公共仓库。

第一步:创建配置文件

新建login_config.json,内容如下:

{
    "username": "xDin...",
    "password": "你的密码"
}

第二步:修改登录脚本

from selenium import webdriver
import time
import json

# 读取配置文件
with open("login_config.json", "r", encoding="utf-8") as f:
    login_info = json.load(f)

driver = webdriver.Firefox()
driver.get("https://reddit.com")

uname = driver.find_element_by_name("user")
pword = driver.find_element_by_name("passwd")
button = driver.find_element_by_class_name("btn")

time.sleep(0.5)
uname.send_keys(login_info["username"])
pword.send_keys(login_info["password"])
button.click()

3. 借助系统密钥管理工具

这个方案安全性最高,利用系统自带的密钥管理服务(Windows凭据管理器、macOS钥匙串、Linux秘密服务)来存储密码,需要用到keyring库。

操作步骤:

  1. 先安装依赖库:pip install keyring
  2. 执行一次设置密码的脚本(只需运行一次):
import keyring
# 第一个参数是服务名称,第二个是用户名,第三个是密码
keyring.set_password("reddit_login", "xDin...", "你的密码")

登录脚本修改:

from selenium import webdriver
import time
import keyring

username = "xDin..."
# 从系统密钥库读取密码
password = keyring.get_password("reddit_login", username)

driver = webdriver.Firefox()
driver.get("https://reddit.com")

uname = driver.find_element_by_name("user")
pword = driver.find_element_by_name("passwd")
button = driver.find_element_by_class_name("btn")

time.sleep(0.5)
uname.send_keys(username)
pword.send_keys(password)
button.click()

4. 运行时手动输入密码

如果每次运行脚本时愿意手动输入密码,可以用getpass模块,输入的密码不会在终端显示,避免泄露。

修改后的脚本:

from selenium import webdriver
import time
from getpass import getpass

username = input("请输入你的用户名:")
# getpass输入的密码不会在终端回显
password = getpass("请输入你的密码:")

driver = webdriver.Firefox()
driver.get("https://reddit.com")

uname = driver.find_element_by_name("user")
pword = driver.find_element_by_name("passwd")
button = driver.find_element_by_class_name("btn")

time.sleep(0.5)
uname.send_keys(username)
pword.send_keys(password)
button.click()

内容的提问来源于stack exchange,提问作者William Rodriguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:27:08