摘要:使用實現網頁截屏查庫發郵件的。本是用于發周報郵件的,周報內容包括數據庫中的記錄以及網頁指定元素的截屏。用于網頁截屏,用于傳遞參數。注意其中使用截取中為的元素的操作。
使用python(2.7)實現網頁截屏、查庫、發郵件的demo。用到了selenium、phantomjs、mailer、jinja2、mysqldb還有image,都是比較典型的用法,可復用性比較強,記錄分享一下。
本demo是用于發周報郵件的,周報內容包括數據庫中的記錄以及網頁指定元素的截屏。linux中可以用crontab每周定時發送。需要發類似周報的同學這下輕松了!
代碼直接看代碼吧,用的python2.7,關于第三方模塊的安裝,都很簡單,這里就不贅述了。
其中相關數據庫參數、郵件參數、網址等真實數據都處理掉了,自己注意替換補全。
#!/usr/bin/python # -*-coding:utf-8 -*- # Author: lvs import MySQLdb.cursors import datetime from mailer import Mailer from mailer import Message from jinja2 import Environment, PackageLoader from selenium import webdriver from PIL import Image from time import sleep def fetch_results(): today = datetime.datetime.today() seven_day_ago = today - datetime.timedelta(days=7) today_str = today.strftime("%Y-%m-%d") seven_day_ago_str = seven_day_ago.strftime("%Y-%m-%d") db = MySQLdb.connect(host="127.0.0.1", port=3306, user="test", passwd="test", db="test", charset="utf8", cursorclass=MySQLdb.cursors.DictCursor) cursor = db.cursor() sql = "SELECT * FROM test.test WHERE start_time < "{today}" and start_time >= "{seven_day_ago}"".format( today=today_str, seven_day_ago=seven_day_ago_str) cursor.execute(sql) results = cursor.fetchall() db.close() return results def screen_shot(event_id): driver = webdriver.PhantomJS(executable_path="/usr/local/phantomjs-2.1.1-linux-x86_64/bin/phantomjs") driver.set_page_load_timeout(5) driver.set_window_size("1920", "1080") url = "http://test.com/detail?id={}".format(event_id) driver.get(url) sleep(3) img_path = "/home/lvs/image/event_{}.png".format(event_id) driver.save_screenshot(img_path) element = driver.find_element_by_id("main") left = int(element.location["x"]) top = int(element.location["y"]) right = int(element.location["x"] + element.size["width"]) bottom = int(element.location["y"] + element.size["height"]) driver.quit() im = Image.open(img_path) im = im.crop((left, top, right, bottom)) im.save(img_path) def send_mail(results): env = Environment(loader=PackageLoader("jinja", "templates")) template = env.get_template("mail.html") message = Message(From="test@123.com", To="test@123.com", charset="utf-8") message.Subject = "這是郵件主題" message.Html = template.render(results=results) for r in results: #指定cid參數將嵌入郵件html內容發送,不指定將作為附件發送 message.attach("/home/lvs/image/event_{}.png".format(r["id"]), cid=r["id"]) message.attach("/home/lvs/image/event_{}.png".format(r["id"])) sender = Mailer("test.smtp.com") sender.send(message) if __name__ == "__main__": data = fetch_results() for row in data: screen_shot(row["id"]) send_mail(data)
fetch_results()讀庫,返回結果,沒啥好說的。
screen_shot(event_id)用于網頁截屏,event_id用于傳遞url參數。使用selenium+phantomjs實現,都是python爬蟲很典型的工具。注意其中使用Image截取DOM中id為main的元素的操作。截取后保存到本地。
send_mail(results)自然是發郵件,利用了mailer和jinja2模板,其中env = Environment(loader=PackageLoader("jinja", "templates"))這一句是jinja2加載模板的代碼,模板位于與此py腳本文件同目錄的jinja包下templates目錄下的mail.html中。可以看下在mail中嵌入圖片和作為附件發送的操作。
mail.html內容如下:
最近一周事件記錄:
{% for row in results %} 事件名稱 事件類型 開始時間 結束時間 事件地點 事件描述 事件詳情 {% endfor %} {{row["name"]}} {{row["type"]}} {{row["start_time"]}} {{row["end_time"]}} {{row["place"]}} {{row["description"]}}
jinja變量row為字典類型,對應數據庫一條記錄,索引都是表字段名,注意替換。
每行最后一列是來自網頁截屏的圖片,一定要注意此處在img標簽的src屬性中用cid引入,否則原始img標簽的引入方式是不生效的!
個人博客:www.hellolvs.com
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/41125.html
摘要:項目簡介本實驗通過使用實現一個淘寶女郎圖片收集爬蟲,學習并實踐及正則表達式等知識。本教程由阿發布在實驗樓,完整教程及在線練習地址實現淘女郎照片爬蟲,可以直接在教程中下載代碼使用。 showImg(https://segmentfault.com/img/bVBgrF); 項目簡介:本實驗通過使用 Python 實現一個淘寶女郎圖片收集爬蟲,學習并實踐 BeautifulSoup、Sel...
摘要:一個網站使用的特征就是源代碼里包含了入口比如如果你在一個網站上看到了,那么采集這個網站數據的時候要格外小心。直接點擊下拉框中的選項不一定可行。未審核初審通過復審通過審核不通過專門提供了類來處理下拉框。 JavaScript JavaScript 是網絡上最常用也是支持者最多的客戶端腳本語言。它可以收集 用戶的跟蹤數據,不需要重載頁面直接提交表單,在頁面嵌入多媒體文件,甚至運行網頁游戲。...
摘要:當前版本是一個服務器端的的。也可以說是無界面瀏覽器。安裝不是程序,去官網下載對應系統版本的安裝即可。方法會一直等到頁面被完全加載,然后才會繼續程序,但是對于是無可奈何的。安裝設置的查看所有可用的屬性。 selenium:https://github.com/SeleniumHQ...當前版本3.0.1A browser automation framework and ecosyste...
摘要:百度云搜索,搜各種資料搜網盤,搜各種資料虛擬瀏覽器是一個基于的內核無頭瀏覽器也就是沒有顯示界面的瀏覽器,利用這個軟件,可以獲取到網址加載的任何信息,也就是可以獲取瀏覽器異步加載的信息下載網址下載對應系統版本下載后解壓文件,將解壓文件夾,剪切 【百度云搜索,搜各種資料:http://www.bdyss.cn】 【搜網盤,搜各種資料:http://www.swpan.cn】 Phantom...
閱讀 481·2021-11-22 12:05
閱讀 1542·2021-11-17 09:33
閱讀 3587·2021-11-11 16:54
閱讀 2677·2021-10-14 09:49
閱讀 4053·2021-09-06 15:01
閱讀 1831·2019-08-29 17:23
閱讀 705·2019-08-29 14:09
閱讀 724·2019-08-29 12:28