Python讀取HTML中的canvas並且以圖片形式存入Word文檔
前言
朋友提問:
創建Word文檔並插入
市面上有很多圖表繪制庫,例如echarts和highcharts等等。對於這種由js動態繪制的圖表,我們隻能控制遊覽器自動截圖存入word,
完整代碼如下:
from docx import Document import os from selenium import webdriver browser = webdriver.Chrome() # 調整遊覽器大小達到調整圖表寬度的目的 browser.set_window_size(540, 1024) url = "file://" + \ os.path.abspath("html/awrcrt_MESDB_1_21369_21373.html").replace("\\", "/") browser.get(url) doc = Document() for canvas in browser.find_elements_by_tag_name("canvas"): canvas.location_once_scrolled_into_view canvas.screenshot("tmp.png") doc.add_picture("tmp.png") doc.save("img.docx")
然後我們得到Word文檔:
插入到已存在的Word文檔指定的位置
後面朋友又反饋,隻需要插入HTML中的指定幾張圖表到現有Word文檔的指定位置。
待插入的圖表元素都有對應的ID可以定位:
那我們隻需要對Word文檔要插入的位置進行標記,模板如下:
然後完整代碼如下:
from docx.shared import Mm from docxtpl import DocxTemplate, InlineImage from docx import Document import os from selenium import webdriver browser = webdriver.Chrome() # 調整遊覽器大小達到調整圖表寬度的目的 browser.set_window_size(540, 1024) url = "file://" + \ os.path.abspath("html/awrcrt_MESDB_1_21369_21373.html").replace("\\", "/") browser.get(url) tpl = DocxTemplate("數據庫性能概覽_模板.docx") canvas_ids = ["canvas_cpu", "canvas_conn", "canvas_commit", "canvas_logon", "canvas_event"] context = {} context["dbname"] = "MESDB" for canvas_id in canvas_ids: canvas = browser.find_element_by_id(canvas_id) canvas.location_once_scrolled_into_view canvas.screenshot(f"{canvas_id}.png") context[canvas_id] = InlineImage(tpl, f"{canvas_id}.png", width=Mm(165)) tpl.render(context) tpl.save("數據庫性能概覽.docx") browser.close()
生成結果:
到此這篇關於Python讀取HTML中的canvas並且以圖片形式存入Word文檔的文章就介紹到這瞭,更多相關Python讀取canvas內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python自動化之批量生成含指定數據的word文檔
- Python快速優雅的批量修改Word文檔樣式
- Python爬蟲之Selenium庫的使用方法
- Python中selenium庫的用法詳解
- python Web應用程序測試selenium庫使用用法詳解