python如何提取浏览器中保存的网站登录用户名密码
python如何提取Chrome中的保存的网站登录用户名密码?
很多浏览器都贴心地提供了保存用户密码功能,用户一旦开启,就不需要每次都输入用户名、密码,非常方便。作为python脚本,能否拿到用户提前保存在浏览器中的用户名密码,用以自动登录呢?必须有,小爬已经提前踩过很多坑,找到了可行的方案。
以Chrome浏览器为例,浏览器中的用户数据(包含加密后的密码)都存在下图所示的位置中:

由于每台电脑的用户名是不确定的,因此小爬这里用python中的OS库来动态得到:
local_computer_directory_path = os.path.join(os.environ["USERPROFILE"], "AppData", "Local", "Google", "Chrome","User Data", "Local State")
知道了具体位置后,我们需要先拿到加密后的密文,显然该密码肯定不是以明文的形式保存在文件中,否则安全无法保证。获取密文之前,还得先知道用于加密的密钥,这需要先安装pycryptodomex库,直接用pip来安装即可。一切就绪,现在编写一个获取密钥的python函数:
1 import os,json,base64,sqlite3,win32crypt,shutil
2 from Cryptodome.Cipher import AES
3 #需要安装pip install pycryptodomex 库
4 from datetime import datetime, timedelta
5 def fetching_encryption_key():
6 '''动态获取保存用户数据的文件的路径,然后读出加密后的密文'''
7 local_computer_directory_path = os.path.join(os.environ["USERPROFILE"], "AppData", "Local", "Google", "Chrome","User Data", "Local State")
8 with open(local_computer_directory_path, "r", encoding="utf-8") as f:
9 local_state_data = f.read()
10 local_state_data = json.loads(local_state_data)
11
12 # decoding the encryption key using base64
13 encryption_key = base64.b64decode(
14 local_state_data["os_crypt"]["encrypted_key"])
15
16 # remove Windows Data Protection API (DPAPI) str
17 encryption_key = encryption_key[5:]
18 # return decrypted key
19 return win32crypt.CryptUnprotectData(encryption_key, None, None, None, 0)[1]
有了这个密钥,咱们还需要编写一个解密的方法将密码变成明文,考虑到Chrome浏览器的版本80之前和之后用了截然不同的加密手段,因此,对应的解密方法也不同,小爬将他们一并整合到解密的函数中:
def password_decryption(password, encryption_key):
try:
iv = password[3:15]
password = password[15:] # generate cipher
cipher = AES.new(encryption_key, AES.MODE_GCM, iv) # decrypt password
return cipher.decrypt(password)[:-16].decode()
except: try:
return str(win32crypt.CryptUnprotectData(password, None, None, None, 0)[1])
except:
return "No Passwords"
1 def get_url_credential(base_url):
2 '''如果chrome浏览器本地存储了OA密码,则返回用户和密码列表,否则返回False'''
3 key = fetching_encryption_key()
4 db_path = os.path.join(os.environ["USERPROFILE"], "AppData", "Local",
5 "Google", "Chrome", "User Data", "default", "Login Data")
6 filename = "ChromePasswords.db"
7 shutil.copyfile(db_path, filename) # 为了避免程序bug将原有的login Data 文件损坏,复制一份出来供程序用
8
9 # connecting to the database
10 db = sqlite3.connect(filename)
11 cursor = db.cursor()
12 cursor.execute("select origin_url, action_url, username_value, password_value, date_created, date_last_used from logins order by date_last_used")
13 user_name,pass_word=None,None
14 userInfos=[] # 用于存放多组同一个网站的用户名 密码
15 for row in cursor.fetchall():
16 main_url = row[0]
17 if base_url in main_url:
18 user_name = row[2]
19 pass_word = password_decryption(row[3], key)
20 userInfos.append([user_name,pass_word])
21 cursor.close()
22 db.close()
23 try:
24 os.remove(filename)
25 except:
26 pass
27 return userInfos
还在围观吗?动手能力强的已经跃跃欲试,把它用到真正的办公自动化场景中了。希望这些对现实业务的思考和代码实现,能对您的工作有所启发。不管咋说,活到老,学到老。拒绝躺平,一起卷起来!
快来关注本公众号 获取更多爬虫、数据分析的知识!

python如何提取浏览器中保存的网站登录用户名密码的更多相关文章
- 渗透技巧——导出Chrome浏览器中保存的密码
0x00 前言 在后渗透阶段,获得权限后需要搜集目标系统的信息.信息越全面,越有助于进一步的渗透.对于Windows系统,用户浏览器往往包含有价值的信息. 在之前的文章<本地密码查看工具LaZa ...
- 导出Chrome浏览器中保存的密码
title: 导出Chrome浏览器中保存的密码 date: 2018-02-11 17:54:51 tags: --- 导出Chrome浏览器中保存的密码 先知看到的,挺有意思,记录一下 不同浏览器 ...
- 在Chrome浏览器中保存的密码有多安全?
本文由 伯乐在线 - 黄利民 翻译.未经许可,禁止转载!英文出处:howtogeek.欢迎加入翻译组. [2013-08-09 更新]:最近又开始讨论“Chrome浏览器明文保存密码这个话题了,国外一 ...
- Python opencv提取视频中的图片
作者:R语言和Python学堂链接:https://www.jianshu.com/p/e3c04d4fb5f3 这个函数就是本文要介绍的video2frames()函数,功能就是从视频中提取图片,名 ...
- 如何用cookie保存用户的登录的密码和用户名
思路:绘制一个简单的登录界面的Servlet并要在此页面中读取保存密码和用户名的cookie--->在登录处理界面的servlet中把用户名和密码保存到cookie中 //登录界面的Servle ...
- python技巧 — Chrome浏览器中的 XPath Helper
用于XPath 爬取网页结构的时候使用, 安装后 快捷键调用 左边 ctrl+ shift+x 启动 安装流程: 1. 打开chrome浏览器,扩展程序 .搜索 XPath Helper 下载安装(前 ...
- python 正则表达式 提取网页中标签的中文
转载请注明出处 http://www.cnblogs.com/pengwang52/. >>> p= re.compile(r'\<div class="commen ...
- python字符串 提取括号中的内容
返回值是一个列表 re.findall(r'[(](.*?)[)]', str1)
- google浏览器中 查看记住的账号和密码
对于一个有“健忘症”的人来说,密码形同虚设..设置了就忘记,每次登陆都要重新设置密码... 然后,无意中发现,谷歌浏览器点过一次记住密码后,竟然可以明文查看账号和密码!! 步骤: 1.打开谷歌浏览器, ...
- Python使用Mysql过程中一些错误
Python使用Mysql过程中一些错误 ssh登录远程服务器 ssh ubuntu@xxx.xxx.xx.xx 第一:ubuntu终端中登录Mysql mysql -uroot -p 然后输入密码即 ...
随机推荐
- 2021-10-03:合并两个有序数组。非递减数组nums1和nums2。合并这两个数组并放在nums1中。力扣88。
2021-10-03:合并两个有序数组.非递减数组nums1和nums2.合并这两个数组并放在nums1中.力扣88. 福大大 答案2021-10-03: 从右往左遍历nums1和nums2,谁大拷贝 ...
- React笔记-生命周期(七)
React笔记-生命周期(七) 生命周期值React组件从装载到卸载的全过程 在这个过程中React提供了多个内置函数供开发者在不同阶段执行需要的逻辑 状态组件由3个阶段组成 挂载阶段(MOUNTIN ...
- SQL Server临时表删除
SQL Server临时表删除 IF (SELECT object_id('tempdb..#tmpacqichu')) is not null DROP TABLE #tmpacqichu
- Vue 打包后报 Uncaught SyntaxError: Unexpected token ‘<‘
根本原因在于你的vue.config.js里的publishPath设置的路径是相对路径还是绝对路径 大家都是看别人设置成 process.env.NODE_ENV==='production' ? ...
- Blazor实战——Known框架增删改查导
本章介绍学习增.删.改.查.导功能如何实现,下面以商品资料作为示例,该业务栏位如下: 类型.编码.名称.规格.单位.库存下限.库存上限.备注 1. 前后端共用 1.1. 创建实体类 在KIMS项目En ...
- 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 预测部署简介与总览
百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 预测部署简介与总览 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Infer ...
- 前端热力图组件heatMapGD中国地图 中国热力地图 广东省热力地图 广东省地图 地市选择
快速实现前端中国热力地图 广东省热力地图 广东省地图, 请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12407 # china 广东省热力 ...
- 教你学会使用Angular 应用里的 export declare const X Y
摘要:export declare const X: Y语法用于在Angular应用程序中声明一个具有指定类型的常量变量,并将其导出,以便在其他文件中使用. 本文分享自华为云社区<关于 Angu ...
- WakaTime Readme Stats-开源项目翻译
寻找不同语言和地区的翻译 #23 Readme中添加了功能标志的开发指标 眼前一亮的Readme统计数据 你是早起的还是夜间的? 你一天中什么时候工作效率最高? 你用什么语言编写代码? 让我们在你的个 ...
- Cisco命令中login和login local的区别
login是开启远程登录密码验证,login local不但要求密码,还要求提供用户名 如果同时设置login和login local,login local有效 (config-line)#line ...