脚本如何提取浏览记录

wen 实用脚本 31

本文目录导读:

脚本如何提取浏览记录

  1. 核心前提:必须获得用户明确授权
  2. 技术原理:浏览器如何存储历史记录
  3. 合法提取脚本示例(仅供你自己使用)
  4. 法律与道德风险(必须注意)
  5. 总结与建议

提取浏览记录是一个涉及隐私和法律问题的敏感操作,根据不同的场景和需求,方法完全不同,以下从合法授权、技术原理、代码示例法律风险四个层面为你说明。

核心前提:必须获得用户明确授权

在绝大多数国家(包括中国、欧盟GDPR、美国CCPA等),未经用户同意提取其浏览记录是非法的,脚本只能在以下场景使用:

  1. 你自己使用的浏览器(通过开发工具或本地脚本)。
  2. 用户明确同意的网站或浏览器插件(如:用户点击“导出历史记录”按钮)。
  3. 企业内部管理(需遵守公司政策,且通常只收集业务数据,不收集个人隐私)。

如果你正在开发一个监控员工或他人的脚本,请立即停止并咨询法律合规部门。


技术原理:浏览器如何存储历史记录

浏览器历史记录存储在本地数据库中,不同浏览器存储位置和格式不同:

浏览器 存储位置 (常见路径) 数据库格式 备注
Chrome / Edge %LOCALAPPDATA%\Google\Chrome\User Data\Default\History SQLite 文件被浏览器占用时需复制后读取
Firefox %APPDATA%\Mozilla\Firefox\Profiles\*.default\places.sqlite SQLite 需先关闭Firefox
Safari (macOS) ~/Library/Safari/History.db SQLite macOS 10.15+ 有沙盒限制
移动端 (Android) /data/data/com.android.chrome/databases/ SQLite 需root或越狱,极难

核心数据表(以Chrome为例):

  • urls:存储URL、标题、访问次数、最后访问时间等。
  • visits:存储每次访问的详细信息(时间戳、来源等)。
  • keyword_search_terms:存储搜索关键词(如果来自搜索引擎)。

合法提取脚本示例(仅供你自己使用)

以下提供三种常见方法,请确保你拥有该浏览器文件的读取权限

方法1:本地Python脚本(最直接,Windows/Mac/Linux)

适用场景:提取你自己电脑上当前用户的浏览器历史。

import sqlite3
import os
import shutil
import time
from datetime import datetime
def get_chrome_history():
    """
    提取Chrome浏览记录(需要先关闭Chrome,或复制文件)
    """
    # 1. 定位Chrome历史记录文件
    user_home = os.path.expanduser("~")
    if os.name == 'nt':  # Windows
        db_path = os.path.join(user_home, "AppData", "Local", "Google", "Chrome", "User Data", "Default", "History")
    elif os.name == 'posix':  # macOS/Linux
        db_path = os.path.join(user_home, "Library", "Application Support", "Google", "Chrome", "Default", "History")  # macOS
        if not os.path.exists(db_path):
            db_path = os.path.join(user_home, ".config", "google-chrome", "Default", "History")  # Linux
    if not os.path.exists(db_path):
        print("Chrome历史记录文件未找到,请检查路径或确保Chrome已正确安装。")
        return []
    # 2. 关键: 如果Chrome正在运行,文件会被锁定,需要复制一份
    temp_db = "chrome_history_backup.db"
    try:
        shutil.copy2(db_path, temp_db)
    except PermissionError:
        print("权限不足,请尝试关闭Chrome后再运行。")
        return []
    # 3. 连接数据库并查询
    try:
        conn = sqlite3.connect(temp_db)
        cursor = conn.cursor()
        # 查询最近100条记录,按时间降序排序
        cursor.execute("""
            SELECT url, title, last_visit_time
            FROM urls
            WHERE last_visit_time > 0
            ORDER BY last_visit_time DESC
            LIMIT 100
        """)
        rows = cursor.fetchall()
        # 4. 解析时间戳(Chrome使用1601年1月1日为基础的微秒数)
        def chrome_time_to_datetime(chrome_time):
            if chrome_time == 0:
                return None
            # Chrome时间 = (1601-01-01 到 1970-01-01 的微秒数) + 实际时间
            # 太复杂,简化方法:使用已知参考
            seconds = (chrome_time - 11644473600000000) / 1000000  # 近似转换
            return datetime.fromtimestamp(seconds) if seconds > 0 else None
        result = []
        for url, title, last_visit in rows:
            visit_time = chrome_time_to_datetime(last_visit)
            result.append({
                'url': url,
                'title': title if title else '无标题',
                'last_visit': visit_time.strftime('%Y-%m-%d %H:%M:%S') if visit_time else '未知'
            })
        return result
    except Exception as e:
        print(f"读取数据库出错: {e}")
        return []
    finally:
        conn.close()
        # 删除临时文件
        if os.path.exists(temp_db):
            os.remove(temp_db)
# 使用示例
if __name__ == "__main__":
    history = get_chrome_history()
    if history:
        print(f"获取到 {len(history)} 条最近浏览记录:")
        for item in history[:10]:  # 只显示前10条
            print(f"[{item['last_visit']}] {item['title'][:50]}... {item['url'][:80]}")
    else:
        print("未获取到任何记录。")

方法2:浏览器扩展 (Manifest V3)

适用场景:开发一个用户自愿安装的扩展,用于分析自己的浏览行为。

关键APIchrome.history API(只返回用户已授权的浏览器历史数据)。

// manifest.json
{
  "manifest_version": 3,
  "name": "我的历史查看器",
  "version": "1.0",
  "permissions": [
    "history"  // 需要声明历史权限
  ],
  "action": {
    "default_popup": "popup.html"
  },
  "background": {
    "service_worker": "background.js"
  }
}
// background.js (或 popup.js)
chrome.history.search({
  text: '', // 搜索所有记录
  startTime: Date.now() - 24 * 60 * 60 * 1000, // 过去24小时
  maxResults: 100
}, function(historyItems) {
  console.log("最近浏览记录:", historyItems);
  // 你可以将数据发送到本地存储或显示在弹窗中
  // 注意:不允许上传到远程服务器(违反Chrome Web Store政策)
});

方法3:自动化测试框架 (如Selenium)

适用场景仅在你的测试浏览器实例上,提取机器人操作的浏览记录。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 创建一个指定用户数据目录的浏览器实例
options = Options()
options.add_argument("--user-data-dir=/path/to/your/test/profile/dir")
driver = webdriver.Chrome(options=options)
# 执行一些操作后,你可以:
# 1. 直接读取上面提到的本地的 SQLite 文件(同上方法)
# 2. 或通过JavaScript获取当前tab的历史(只能获取当前页面)

注意:Selenium无法直接读取所有历史记录,只能操作当前会话。


法律与道德风险(必须注意)

行为 法律风险 道德风险
提取他人的浏览记录(未经同意) 侵犯个人隐私(可能触犯《刑法》第253条之一,《民法典》第1032条,GDPR第6条,CCPA等) 严重不道德,破坏信任
在公司电脑上未经许可提取 违反员工守则与劳动法,可能被解雇或起诉 不尊重同事/员工
开发恶意软件提取数据 构成刑事犯罪,最高可判数年 非常恶劣
为研究目的提取匿名数据 需通过伦理审查委员会(IRB)批准 需确保完全匿名无风险
提取自己的浏览记录 完全合法 个人行为,无道德问题

总结与建议

  1. 只处理你自己的数据:使用上述Python脚本在你自己的电脑上运行。
  2. 如果你需要开发工具:开发用户主动安装并明确许可的浏览器扩展,只使用chrome.history API。
  3. 永远不要尝试:尝试拿别人的浏览器文件、监控他人、使用未授权的API。
  4. 技术替代方案:如果你需要分析员工的浏览行为做网络安全,使用专业的企业级代理/防火墙日志(如Squid, ZScaler),而不是直接读取本地文件——这些日志通常由公司IT政策明确告知员工。

如果你需要提取浏览记录来完成某个特定任务(如数据分析、个人定制研究),请务必在完全合法的框架内操作,并且只针对你拥有所有权的数据。

抱歉,评论功能暂时关闭!