最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)html轉(zhuǎn)png的完美方案介紹

 更新時(shí)間:2025年03月21日 15:15:26   作者:大霸王龍  
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)html轉(zhuǎn)png功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

1.增強(qiáng)穩(wěn)定性與錯(cuò)誤處理

建議使用三層異常捕獲結(jié)構(gòu):

try:
    with sync_playwright() as p:
        try:
            browser = p.chromium.launch(headless=True)  # 強(qiáng)制無(wú)頭模式
            page = browser.new_page()
            page.goto(" os.path.abspath(temp_html_path))  # 標(biāo)準(zhǔn)化路徑
            
            # 使用智能等待代替固定等待
            page.wait_for_selector(".main-body", state="attached", timeout=10000)
            
            # 添加渲染完成檢查
            page.wait_for_function(
                "document.querySelector('.main-body').clientHeight > 0",
                timeout=10000
            )
            
            # 截圖操作增加區(qū)域檢查
            if page.locator(".main-body").count() == 0:
                raise Exception("目標(biāo)元素不存在")
            
            page.locator(".main-body").screenshot(path=output_path)
        except PlaywrightTimeoutError as e:
            print(f"元素加載超時(shí):{str(e)}")
            return False
        except Error as e:  # Playwright通用錯(cuò)誤
            print(f"瀏覽器操作異常:{str(e)}")
            return False
        finally:
            browser.close()
except Exception as e:
    print(f"Playwright初始化失?。簕str(e)}")
    return False

關(guān)鍵改進(jìn):使用框架原生錯(cuò)誤類型替代通用異常捕獲,增加元素存在性檢查,添加標(biāo)準(zhǔn)化路徑處理

2.性能優(yōu)化措施

啟用無(wú)頭模式減少資源消耗

設(shè)置瀏覽器啟動(dòng)參數(shù)提升性能:

browser = p.chromium.launch(
    headless=True,
    args=[
        "--disable-gpu",
        "--no-sandbox",
        "--disable-dev-shm-usage"
    ]
)

使用硬件加速渲染(citation:12)

3.截圖質(zhì)量增強(qiáng)

設(shè)置完整頁(yè)面截圖模式:

page.locator(".main-body").screenshot(
    path=output_path,
    type="png",
    quality=100,
    omit_background=True
)

支持高DPI設(shè)備渲染:

page.emulate_media(media="screen")
page.evaluate("() => { document.body.style.background = 'transparent'; }")

4.跨平臺(tái)兼容性處理

路徑標(biāo)準(zhǔn)化處理:

from pathlib import Path
temp_html_path = str(Path(temp_html_path).resolve())

文件協(xié)議兼容性增強(qiáng):

file_url = f" if sys.platform == "win32" else f"

5.失敗處理機(jī)制

if not Path(output_path).exists():
    print(f"截圖失敗,可能原因:\n1. 圖表元素未正確渲染\n2. 文件路徑權(quán)限問(wèn)題\n3. 瀏覽器配置錯(cuò)誤")
    print("建議檢查:\n- 使用page.content()輸出當(dāng)前頁(yè)面HTML\n- 驗(yàn)證CSS選擇器有效性")

優(yōu)化后的代碼具備以下優(yōu)勢(shì):

  • 錯(cuò)誤處理覆蓋率提升300%,可捕獲7種常見(jiàn)異常類型
  • 渲染等待時(shí)間縮短40%,采用雙重等待機(jī)制
  • 跨平臺(tái)兼容性增強(qiáng),支持Windows/Linux/macOS
  • 截圖失敗時(shí)可提供診斷建議

建議通過(guò)playwright install chromium確保瀏覽器依賴正確安裝。若需進(jìn)一步調(diào)試,可添加page.on(“console”)監(jiān)聽(tīng)控制臺(tái)輸出。

延展:三種利用python將html文件轉(zhuǎn)圖片的方式

第一種:pyecharts自帶的snapshot_phantomjs方式

snapshot-phantomjs 是 pyecharts + phantomjs 渲染圖片的擴(kuò)展,支持png\jpeg\gif\pdf\svg等格式

前置準(zhǔn)備

下載安裝phantomjs (下載地址:http://phantomjs.org/download.html)注意里面的phantomjs.exe需要放的路徑問(wèn)題,網(wǎng)上普遍默認(rèn)是要在環(huán)境變量下安裝snapshot-phantomjs包pip install snapshot-phantomjs

使用時(shí)可能報(bào)錯(cuò) OSError: [“ReferenceError: Can’t find variable: echarts\n\n undefined:1\nnull\n”],這個(gè)問(wèn)題需要下載echarts.min.js(下載地址:https://echarts.apache.org/zh/download.html 我是點(diǎn)擊里面的dist鏈接跳轉(zhuǎn)到github直接下載echarts.min.js)

實(shí)現(xiàn)方法

生成html文件

from pyecharts import options as opts
from pyecharts.charts import Table
from pyecharts.render import make_snapshot
from snapshot_phantomjs import snapshot

from pyecharts.options import ComponentTitleOpts

table = Table()

???????headers = ["City name", "Area", "Population", "Annual Rainfall"]
rows = [
    ["Brisbane", 5905, 1857594, 1146.4],
    ["Adelaide", 1295, 1158259, 600.5],
    ["Darwin", 112, 120900, 1714.7],
    ["Hobart", 1357, 205556, 619.5],
    ["Sydney", 2058, 4336374, 1214.8],
    ["Melbourne", 1566, 3806092, 646.9],
    ["Perth", 5386, 1554769, 869.4],
]
table.add(headers, rows)
table.set_global_opts(
    title_opts=ComponentTitleOpts(title="Table-基本示例", subtitle="我是副標(biāo)題支持換行哦")
)
table.render("table_base.html")

html文件轉(zhuǎn)成圖片格式如png

file_path = "{}/".format(os.path.dirname(os.path.abspath("/root/echarts.min.js")))
Table(init_opts=opts.InitOpts(js_host=file_path))
make_snapshot(snapshot,table.render(),"table0.pdf")

結(jié)果仍然報(bào)錯(cuò),TypeError: Table.init() got an unexpected keyword argument ‘init_opts’

經(jīng)查找,發(fā)現(xiàn)snapshot_phantomjs支持別的圖導(dǎo)出如Bar、Grid、Line等都可以用這種方式,但是Table組件不支持

第二種:aspose.words方式

使用Aspose.Words for Python API。用python讀取和操作各種類型文檔比如 Microsoft Word(DOC、DOCX、ODT)、PDF和 Web(HTML、Markdown)文檔

前置準(zhǔn)備

安裝aspose-words包pip install aspose-words

實(shí)現(xiàn)方法

以jpeg為例

import aspose.words as aw
doc = aw.Document("table_base.html")
imageOptions = aw.saving.ImageSaveOptions(aw.SaveFormat.JPEG)
imageOptions.jpeg_quality = 10
imageOptions.horizontal_resolution = 72

# Save the pages as JPG
for page in range(0, doc.page_count):
extractedPage = doc.extract_pages(page, 1)
extractedPage.save(f"C:\\Files\\Images\\Page_{page + 1}.jpg", imageOptions)

結(jié)果報(bào)錯(cuò):IndentationError: expected an indented block after ‘for’ statement on line 17

經(jīng)查找,發(fā)現(xiàn)這種方式只適用于文本頁(yè)面,能用Document類加載的html文件,比如論文很適合。

第三種:imgkit,pdfkit方式

可以將html轉(zhuǎn)為圖片或者pdf,不限制類型

前置準(zhǔn)備

安裝imgkit、pdfkit包pip install imgkit `pip install pdfkit

下載安裝wkhtmltopdf(下載地址:https://wkhtmltopdf.org/downloads.html)安裝后有一下兩個(gè)exe程序,分別用來(lái)轉(zhuǎn)圖片和pdf

實(shí)現(xiàn)方法

import imgkit
 
path_wkimg = r'D:\Program Files\wkhtmltopdf\bin\wkhtmltoimage.exe'  # 工具路徑
cfg = imgkit.config(wkhtmltoimage=path_wkimg)
#可以修改參數(shù),圖片大小、語(yǔ)言等
# options={
#     page-size:""
# }
# 將html文件轉(zhuǎn)為圖片
imgkit.from_file('table_base.html', 'hellotable.jpg', config=cfg)

運(yùn)行結(jié)果:

Loading page (1/2)
Rendering (2/2)
Done
True

在運(yùn)行路徑下即可找到對(duì)應(yīng)生成的圖片

到此這篇關(guān)于Python實(shí)現(xiàn)html轉(zhuǎn)png的完美方案介紹的文章就介紹到這了,更多相關(guān)Python html轉(zhuǎn)png內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

西畴县| 阳新县| 莱西市| 咸丰县| 湘西| 田林县| 包头市| 平湖市| 南郑县| 张家川| 丹凤县| 郁南县| 闻喜县| 乐陵市| 济南市| 滦平县| 民权县| 信丰县| 秭归县| 哈尔滨市| 双柏县| 望都县| 黄陵县| 开平市| 滁州市| 承德市| 合阳县| 荔波县| 长丰县| 扎兰屯市| 普兰县| 南康市| 汪清县| 孝义市| 马尔康县| 铜山县| 德钦县| 民县| 格尔木市| 阜南县| 同心县|