python自動截圖發送郵件_PhantomJS按尺寸截取頁面,并用python發送郵件

前言:當前有個任務是要把幾個網站的日志返回狀態碼進行匯總,用餅圖展示,并每天發送郵件。

一、分析問題

畫出餅圖,這個我用kibana給畫出來了,下面不做講解;

截取餅圖,因為kibana是用js展示出來的,而不真的是一張jpg的圖片,如何截取你想要的圖片;

發送截圖,想到利用python發送郵件,但發出來總是以附件形式,而我想直接在郵件里展示截圖;

知道問題了,下面講具體的解決問題過程

二、安裝 PhantomJS

PhantomJS介紹:PhantomJS是一個基于 WebKit 的服務器端 JavaScript API。它全面支持web而不需瀏覽器支持,其快速,原生支持各種Web標準: DOM 處理, CSS 選擇器, JSON, Canvas, 和 SVG。 PhantomJS 可以用于 頁面自動化 , 網絡監測 , 網頁截屏 ,以及 無界面測試 等。

1. 安裝依賴包

yum install gcc gcc-c++ make git openssl-devel freetype-devel fontconfig-devel

2. 下載 phantomjs

git clone git://github.com/ariya/phantomjs.git

3. 編譯 phantomjs

cd phantomjs

git checkout 1.9

./build.sh

此過程比較耗時,可以先去打個飛機,編譯完這個目錄大概有700多M

4. 測試

cat baidu.js

var page = require('webpage').create();

page.open('http://www.baidu.com', function () {

page.render('baidu.png');

phantom.exit();

});

運行

./phantomjs/bin/phantomjs baidu.js

可以看到本地生產的baidu.png

baidu

看,它會把整個頁面給截下來,下面我們繼續進行細致的截圖。

三、按要求截圖

先看看原網頁

kibana

我們只要中間的餅圖和它上面的一行狀態碼數量統計,

1. 改善腳本1

cat kibana.js

var page=require('webpage').create();

var address='http://log.xxx.cn/#/dashboard/file/sla.json'; // 設置url

var output='kiban.png'; // 設置保存文件名

page.viewportSize={width:1024,height:800}; // 設置查看頁面的分辨率

page.open(address,function(status){

if(status!=='success'){

console.log('Unabletoloadtheaddress!');

phantom.exit();

}else{

window.setTimeout(function(){

page.clipRect={top:170, left:10, height: 330, width: 980}; // 設置頁邊距,從而獲取想要的圖片,需要慢慢調整

page.render(output); // 保存圖片

phantom.exit();

},20000);

}

});

運行,可以得到如下圖:

Paste_Image.png

你也可以只要中間的餅圖,為了方便用同樣的方法獲得其他網頁的統計截圖,再次修改下腳本

2. 改善腳本2

cat kibana.js

var page=require('webpage').create();

var address = phantom.args[0];

var output = phantom.args[1];

page.viewportSize={width:1024,height:800}; // 設置查看頁面的分辨率

page.open(address,function(status){

if(status!=='success'){

console.log('Unabletoloadtheaddress!');

phantom.exit();

}else{

window.setTimeout(function(){

page.clipRect={top:170, left:10, height: 330, width: 980}; // 設置頁邊距,從而獲取想要的圖片,需要慢慢調整

page.render(output); // 保存圖片

phantom.exit();

},20000);

}

});

如上,我們把url和文件名改成接收參數

運行:

./phantomjs/bin/phantomjs kibana.js http://log.xxx.cn/#/dashboard/file/sla.json kibana.png

我們只需要變換url和文件名,就可以獲得其他統計圖,完成后我們把它加到郵件發出去

四、發送郵件

python發郵件沒啥好說的,網上有很多腳本,我也是在網上擼的腳本,剛開始郵件是能發,但是發的圖片總是以附件形式展示,而不是打開郵件就能看到截圖,在網上找了好久終于找到 Python/Perl 如何在HTML郵件正文中嵌入本地圖片,原來要先把圖片插入html頁面,然后以html形式發送郵件,最后腳本如下:

cat send_page.py

#!/usr/bin/env python

#coding:utf8

import smtplib

from email.mime.multipart import MIMEMultipart

from email.mime.base import MIMEBase

from email.mime.text import MIMEText

from email.mime.image import MIMEImage

from email import encoders

import sys

import os

from datetime import *

# 定義函數

def send_mail(to_list, sub):

me = mail_user + ""

msg = MIMEMultipart()

msg['Subject'] = sub

msg['From'] = me

msg['To'] = "".join(to_list)

# 生成不同的url,并通過/root/kibana.js 生成不同的png圖片

for i in ('node', 'mapi', 'api', 'yunying-sla'):

os.system("/root/phantomjs/bin/phantomjs /root/kibana.js http://log.xxx.cn/#/dashboard/file/%s.json %s.png" % (i,i))

#二進制模式讀取圖片,并綁定到郵件頭

with open(i+'.png', 'rb') as fp:

img = MIMEImage(fp.read())

img.add_header('Content-ID', i)

msg.attach(img)

# kibana會收集從此刻算起前24小時的數據,我在郵件開頭記錄時間間隔,

d = datetime.now()

dt = d.strftime('%Y-%m-%d %H:%M:%S')

at = (d - timedelta(1)).strftime('%Y-%m-%d %H:%M:%S')

timezone = at + ' ~ ' + dt

#構造html

html = """\

采集時間: """ + timezone + """

node

[img src="cid:node" alt="node">

mapi

[img src="cid:mapi" alt="mapi" >

api

[img src="cid:api" alt="api" >

yunying

[img src="cid:yunying-sla" alt="yunying-sla" >

"""

# 請把 [img 換成

context = MIMEText(html,_subtype='html',_charset='utf-8') #定義發送的形式和編碼格式,這里以html形式發送

msg.attach(context)

try:

send_smtp = smtplib.SMTP()

send_smtp.connect(mail_host)

send_smtp.login(mail_user, mail_pass)

send_smtp.sendmail(me, to_list, msg.as_string())

send_smtp.close()

return True

except Exception, e:

print str(e)[1]

return False

# 設置服務器名稱、用戶名、密碼以及郵件后綴

mail_host = 'smtp.xxx.com'

mail_user = 'jianwen.lu@xxx.com'

mail_pass = '8888888888'

mail_postfix = "xxx.com"

#mailto_list = ["763836801@qq.com","jianwen.lu@weimob.com"]

mailto_lists = sys.argv[1]

mailto_list = mailto_lists.split(',') #發送多人

sub= sys.argv[2]

# send_mail

if send_mail(mailto_list, sub):

print "Send mail succed!"

else:

print "Send mail failed!"

運行:

python send_sla.py jianwen.lu@xxx.com "網站服務狀態sla"

由于es查詢日志,并給kibana展示需要花點時間,所以你最好去打個飛機再來

我們收下郵件:

mail

點擊藍色字體,還可以直接去頁面看

好了,至此,做好計劃任務,等著每天發圖了,啦啦啦。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533571.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533571.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533571.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nikita popov php,PHP中對performance的考慮點

Nikita Popov 在他的演講中談了幾個PHP 程序中和performance相關的point。1.PHP使用shared memory, preload的方式事先分配,而只有在所有的處理結束之后,share memory 才會斷開和所有進程或者thread之間的聯系。光是opcode,FPM的設定還不足以…

python建模仿真 matlab_清華大學出版社-圖書詳情-《仿真建模與MATLAB實用教程》

MATLAB語言是目前世界上最為流行的科學計算語言之一,它的特點是能夠快速地完成諸如矩陣運算、微分、尋優等計算任務。由于它配備了很多應用領域的專業工具箱,諸如金融、信號處理、圖像處理、神經網絡、嵌入式系統、仿真建模等,而且每個工具箱都包含了該應…

java web使用jquery,JAVA_Web_JQuery

簡介:jquery 全稱 javaScript Query.是js的一個框架。本質上仍然是js。特點:支持各種主流的瀏覽器、使用特別簡單、擁有便捷的插件擴展機制和豐富的插件。一、JQuery內部封裝原理介紹:匿名閉包。下面這兩行代碼是jquery包下的已經封裝的代碼&…

python語法學習_Python學習1——語法

Python語法包括了行、縮進、注釋、標識符、保留關鍵字等方面。打印語句:>>> print(hello,world!)hello,world!輸入語句:>>> input(請輸入你的名字:)請輸入你的名字:哈哈#”哈哈”是你自己輸入的名字哈哈 #打印出…

java 兩個頁面傳遞數據,請問Cookie怎么在兩個頁面間傳遞數據?

參考代碼如下://如果請求的Cookie對象為空if (Request.Cookies["userCookie"] null){//創建一個Cookie對象HttpCookie userCookie new HttpCookie("userCookie");//給對象賦值userCookie.Values["userName"] userInfo.UserName.ToS…

優化matlab作業,現代設計優化算法MATLAB實現

開篇語前陣子做現代設計方法的時候,發現網上很是缺乏這種作業形式的簡易算法實現,所以特地來簡書寫一篇。有兩份,一份是我的(說來慚愧,我的大部分都是在網上找的代碼,然后在自己的電腦上跑一次,跑出來了就行…

怎樣用python畫玫瑰花的簡筆畫_玫瑰花簡筆畫素描作品圖片

玫瑰原產是中國。在古時的漢語,“玫瑰”一詞原意是指紅色美玉。玫瑰花這么漂亮,素描怎么畫得好看呢?你知道玫瑰花的簡筆畫素描是怎樣的嗎?今天先和學習啦小編一起欣賞這些玫瑰花簡筆畫素描圖片,希望你會有所收獲的。玫瑰花簡筆畫素描圖片欣…

多因子選選股MATLAB代碼,金工研報:利用卷積神經網絡進行多因子選股

首先,我們先來看一下通過卷積神經網絡選股模型的整體流程,然后再根據每一步流程進行介紹,具體如下圖所示:1、數據獲取用于歷史回測數據來自所有A股股票,其中剔除了ST股以及上市3個月的股票,另外&#xff0c…

python list tuple 打包 解包_python的打包與解包

python的*與**,在函數的定義與調用過程中,有著不同的作用打包參數:一、函數定義時,形參前加*號(如:*args):收集實參中所有的位置參數,打包成新元組并將該元組賦值給args變量實參位置參數&#x…

python 成員函數 泛型函數_【一點資訊】白學這么多年 Python?連泛型函數都不會寫? www.yidianzixun.com...

泛型,如果你嘗過java,應該對他不陌生吧。但你可能不知道在 Python 中(3.4 ),也可以實現 簡單的泛型函數。在Python中只能實現基于單個(第一個)參數的數據類型來選擇具體的實現方式,官方名稱 是single-dispatch。你或許聽不懂&…

matlab bad apple,【bad apple】matlab制作矩陣蘋果~

有屏幕的地方就有bad apple那么作為一名工科生,熟練的操♂作馬桶蘿卜(matlab)是一項基本技能下面開始講解如何用matlab制作別具一格的“矩陣蘋果”~實驗環境matlab R2018a原版bad apple視頻技術要求可以即時演算圖形可以將處理后的每幀圖形合并成新的視頻先上代碼%t…

服務器ip直接訪問php怎么寫,php - 如何實現用公網ip訪問到服務器上的網頁?

服務器系統是Windows Server 2012 R2,已經部署了IIS、PHP和MySQL,能夠在云服務器上通過localhost打開php網頁,(放在服務器wwwroot上的index.php)已在ISS管理器中添加網站,但編輯網站綁定時,在ip地址中填入了服務器的公…

vb6 打印選項對話框_圖紙打印次數太多,不知道哪次才是最新的?用打印戳記區分效果好...

原創:就說我在開發區使用AutoCAD從事設計工作的朋友們不知道有沒遇到過這種情況:圖紙在反復修改打印的過程中,由于圖紙內容高度相似,往往搞不清究竟哪個才是最新版本的圖紙了。這種情況下,細致入微地去核對非常麻煩&am…

安卓文本編輯器php cpp,用安卓原生控件封裝一個簡易的富文本編輯器

最近接到項目需求:移動端原生寫一個富文本編輯器。 ( ⊙ o ⊙ )從沒遇到過富文本要用原生寫的,然后就查閱各種資料。然后結合自己的思路:其實安卓的富文本編輯器就是一個 “容器”。那么接下來我就帶給大家說一說我自定義這個富文本編…

python和nltk自然語言處理書評_Python和NLTK自然語言處理

模塊1 NLTK基礎知識第 1章 自然語言處理簡介 31.1 為什么要學習NLP 41.2 從Python的基本知識開始 71.2.1 列表 71.2.2 自助 81.2.3 正則表達式 91.2.4 詞典 111.2.5 編寫函數 111.3 NLTK 131.4 試一試 181.5 本章小結 18第 2章 文本的整理和清洗 192.…

vue tab切換_iviewUITabs選項卡切換組件

概述 選項卡切換組件,常用于平級區域大塊內容的的收納和展現。源碼地址:https://github.com/iview/iview/tree/2.0/src/components/tabs使用: 標簽一的內容標簽二的內容標簽三的內容標簽二的內容在源碼的tabs文件下有三個文件:ind…

java biginteger 比較大小,java – 打印非常大的BigIntegers

我試圖找出與Java 7 x64中的BigIntegers相關的以下問題.我試圖計算一個極高功率的數字.代碼如下,然后是問題描述.import java.math.BigInteger;public class main {public static void main(String[] args) {// Demo calculation; Desired calculation: BigInteger("4096&…

paypal創建訂單后怎么獲得id_5步創建Facebook商店(最新版教程)學習如何在Facebook上賣貨...

請按照以下步驟設置Facebook商店:步驟1:轉到您的Facebook頁面并配置Shop頁面。步驟2:設置您的商店詳細信息。步驟3:配置付款。步驟4:將產品添加到您的Facebook商店。步驟5:管理您的訂單。步驟6:…

php 網絡圖片 轉本地,PHP將Base64圖片轉換為本地圖片并保存

PHP將Base64圖片轉換為本地圖片并保存/*** [將Base64圖片轉換為本地圖片并保存]* param [Base64] $base64_image_content [要保存的Base64]* param [目錄] $path [要保存的路徑]*/function base64_image_content($base64_image_content,$path){//匹配出圖片的格式if (preg_matc…

創建索引名稱已由現有對象使用_Excel編程周末速成班第3課:Excel對象模型

學習Excel技術,關注微信公眾號:excelperfect導語:為了幫助想要快速學會Excel VBA的朋友,特以《Excel Programming Weekend Crash Course》這本書為基礎,開始整理一系列資料,在完美Excel社群上分享。一共有3…