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库。
操作步骤:
- 先安装依赖库:
pip install keyring - 执行一次设置密码的脚本(只需运行一次):
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
相关产品推荐
相关产品推荐

