Python 실시 간 모니터링 사이트 조회 기록 실현 과정 상세 설명
(1)대상 chrome 의 전날 조회 기록 에 있 는 모든 사이트 주소(url)와 방문 시간 을 가 져 오고 txt 파일 에 존재 합 니 다.
(2)이 txt 파일 을 지정 한 메 일 주소(메 일)에 보 냅 니 다.
(3)정기 적 인 임 무 를 수행 하고 매일 정기 적 으로 이 작업 을 완성 하면 메 일 을 통 해 대상 이 매일 무엇 을 보 는 지 확인 할 수 있 습 니 다.
준비 하 다.
qq 메 일 박스 인증 코드
SMTP 서버 주소:smtp.qq.com
이메일 주소
실행:
(1)우선 DB Browser for SQLite 로 History 의 urls 표 데이터 구성 을 살 펴 보 겠 습 니 다.
표 에서 보 듯 이 우리 가 원 하 는 사이트 와 방문 시간 은 urls.url 과 urls.last 에 있 습 니 다.visit_시간 중
(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 = "[email protected]" #
password = "xxxxxxxx" #
to_addr = "[email protected]" #
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 에서 다음 그림 은 제 가 얻 은 부분 적 인 결과 입 니 다.
(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]+'
')
f.write(results[i][0]+'
')
이 스 크 립 트 를 통 해 result.txt 를 첨부 파일 로 지정 한 메 일 로 보 낼 수 있 습 니 다.주소,아래 그림 은 제 가 얻 은 부분 적 인 결과 입 니 다.
(4)./start.sh:사실 앞의 몇 개의 스 크 립 트 는 우리 의 임 무 를 완 성 했 지만 매번 이렇게 많은 발 을 수행 합 니 다.
이..너무 귀 찮 습 니 다.이 스 크 립 트 의 실행 문 구 를 셸 스 크 립 트 로 정리 할 수 있 습 니 다.
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 입 니 다.중요 한 일 을 다시 한 번 말 하지만,반드시 절대적 인 경 로 를 써 야 한다!!
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.