日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

有了 serverless,前端也可以快速开发一个 Puppeteer 网页截图服务

發布時間:2025/3/20 HTML 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 有了 serverless,前端也可以快速开发一个 Puppeteer 网页截图服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

更多云原生技術資訊可關注阿里巴巴云原生技術圈。

Puppeteer 是什么?

puppeteer 官網的介紹如下:
Puppeteer is a Node library which provides a high-level API to control Chrome or Chromium over the DevTools Protocol. Puppeteer runs headless by default, but can be configured to run full (non-headless) Chrome or Chromium.

通俗描述就是:Puppeteer 可以將 Chrome 或者 Chromium 以無界面的方式運行(當然也可以運行在有界面的服務器上),然后可以通過代碼控制瀏覽器的行為,即使是非界面的模式運行,Chrome 或 Chromium 也可以在內存中正確渲染網頁的內容。
那么 Puppeteer 能做什么呢?

  • 生成網頁截圖或者 PDF
  • 抓取 SPA(Single-Page Application) 進行服務器渲染(SSR)
  • 高級爬蟲,可以爬取大量異步渲染內容的網頁
  • 模擬鍵盤輸入、表單自動提交、登錄網頁等,實現 UI 自動化測試
  • 捕獲站點的時間線,以便追蹤你的網站,幫助分析網站性能問題

本文選擇截圖場景作為演示。

廢話不多說了,我們直接給大家介紹下如何用函數計算產品來快速部署一個 Puppeteer Web 應用。

如何快速部署一個分布式 Puppeteer Web 應用?

為了快速部署分布式 Puppeteer Web 應用,本文以函數計算服務為例來做展示。

函數計算(Function Compute): 函數計算是一個事件驅動的服務,通過函數計算,用戶無需管理服務器等運行情況,只需編寫代碼并上傳。函數計算準備計算資源,并以彈性伸縮的方式運行用戶代碼,而用戶只需根據實際代碼運行所消耗的資源進行付費。函數計算更多信息參考。

有了函數計算服務,我們這里目標是搭建一個分布式應用,但做的事情其實很簡單,那就是寫好業務代碼,部署到函數計算,僅此而已。

使用函數計算后,我們的系統架構圖如下:

效果演示

可以直接通過以下鏈接查看效果:
https://1911504709953557.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/puppeteer-test/html2png/?url=https://www.aliyun.com/product/fc
PS:第一次請求可能會有幾秒的冷啟動時間,通過使用[預留模式](https://statistics.functioncompute.com/?title=有了 serverless,前端也可以快速開發一個 Puppeteer 網頁截圖服務&src=article&author=小默&url=https://help.aliyun.com/document_detail/138103.html?spm=a2c4g.11174283.6.687.882d5212Y0AECh)可以完全去除冷啟動,這題超綱,下次再講。

搭建步驟步驟:

整體流程如下圖所示:

其中,需要我們操作的只有 Fun Init、Fun Install 以及 Fun Deploy 命令,每個的步驟內容都會由這三個命令自動完成。

1. 工具安裝

安裝 Fun 工具

建議直接從這里下載二進制可執行程序,解壓后即可直接使用。[下載地址](https://statistics.functioncompute.com/?title=有了 serverless,前端也可以快速開發一個 Puppeteer 網頁截圖服務&src=article&author=小默&url=https://github.com/alibaba/funcraft/blob/master/docs/usage/installation-zh.md)。

安裝 Docker
可以按照[這里介紹的方法](https://statistics.functioncompute.com/?title=有了 serverless,前端也可以快速開發一個 Puppeteer 網頁截圖服務&src=article&author=小默&url=https://github.com/alibaba/funcraft/blob/master/docs/usage/installation-zh.md?spm=a2c4e.10696291.0.0.6bb619a4UjYXqN#docker)進行安裝。

2. 初始化項目:

通過 Fun 工具,使用下面的命令可以快速初始化一個 Puppeteer Web 應用的腳手架:

fun init -n puppeteer-test http-trigger-node-puppeteer

其中 -n puppeteer-test? 表示初始化項目的目錄名稱, http-trigger-node-puppeteer? 表示要使用的模板名稱,可以省略該名稱,省略后,可以從終端提示的列表中自行選擇需要的模板。
執行完畢后,可以看到如下的目錄結構:

. ├── index.js ├── package.json └── template.yml

相比較于傳統的 puppeteer 應用,這里僅僅多了一個 [template.yml](https://statistics.functioncompute.com/?title=有了 serverless,前端也可以快速開發一個 Puppeteer 網頁截圖服務&src=article&author=小默&url=https://github.com/alibaba/funcraft/blob/master/docs/specs/2018-04-03-zh-cn.md?spm=a2c4e.10696291.0.0.717019a45X1W0g&file=2018-04-03-zh-cn.md) 文件,用于描述函數計算的資源。
而 index.js 就是我們的業務代碼了,可以按照 Puppeteer 官方幫助文檔的要求書寫自己的業務代碼,這里不再重復闡述,核心代碼如下:

const browser = await puppeteer.launch({headless: true,args: ['--no-sandbox','--disable-setuid-sandbox',] }); const page = await browser.newPage(); await page.emulateTimezone('Asia/Shanghai'); await page.goto('https://www.baidu.com', {'waitUntil': 'networkidle2' }); await page.screenshot({ path: '/tmp/example', fullPage: true, type: 'png' }); await browser.close();

package.json 內容如下:

{... ..."dependencies": {"puppeteer": "^2.0.0"},... ... }

可以看到,在 package.json 中聲明了 puppeteer 的依賴。這個也是我們使用 node 開發時的標準做法,并無特別之處。

3. 一鍵安裝依賴

puppeteer 的安裝,即使是在傳統的 linux 機器上,也不是那么的輕松。因為 puppeteer 本身依賴了非常多的系統庫,要安裝哪些系統庫、如何安裝這些系統庫成了一個比較頭痛的問題。

好在函數計算命令行工具 [Fun](https://statistics.functioncompute.com/?title=有了 serverless,前端也可以快速開發一個 Puppeteer 網頁截圖服務&src=article&author=小默&url=https://github.com/alibaba/funcraft) 已經集成了 Puppeteer 的解決方案,只要 package.json 中包含了 puppeteer 依賴,然后使用 fun install -d 即可一鍵安裝所有系統依賴。

fun install -d

4. 本地運行、調試函數

Puppeteer 的本地運行、調試方法與[這里](https://statistics.functioncompute.com/?title=有了 serverless,前端也可以快速開發一個 Puppeteer 網頁截圖服務&src=article&author=小默&url=https://yq.aliyun.com/articles/683683)介紹的完全一致,我們就不再重復介紹。我們這里只演示下運行效果:

5. 一鍵部署應用

基本上所有的 FaaS 平臺為了減小應用的冷啟動,都會設置代碼包的限制,函數計算也不例外。而 puppeteer 自身已經達到了 350M 左右,連同其系統依賴已經達到了 450M。如何將 450M 體積的函數部署到 FaaS 平臺是一個比較頭痛而且繁瑣的問題。

函數計算的命令行工具 Fun 現在原生支持了這種大依賴部署(3.1.1 版本僅支持 node runtime)。不需要任何額外操作,僅僅執行 fun deploy:

$ fun deploy

fun 會自動完成依賴的部署。而當檢測到打包的依賴超過了平臺的限制時,會進入到配置向導,幫助用戶自動化地配置。

我們這里推薦的路徑是當提示是否由 Fun 自動幫助 NAS 管理是,輸入 yes,然后提示提示是否使用 NasConfig: Auto 自動處理 NAS 時,也選擇是,之后就不需要做其他的事情,等待函數部署成功即可。

如果有其他的需求,比如想使用自己已經存在的 NAS 服務,可以在提示使用 [NasConfig: Auto](https://statistics.functioncompute.com/?title=有了 serverless,前端也可以快速開發一個 Puppeteer 網頁截圖服務&src=article&author=小默&url=https://yq.aliyun.com/articles/712693) 時,輸入 no,這樣就會進入到相應的流程。更詳細的說明,請參考下面的 FAQ。

FAQ

在安裝 puppeteer 時,Fun 都做了哪些事情?

puppeteer 本身是一個 npm 包,它的安裝是非常簡單的,通過 npm install 即可。這里的問題在于,puppeteer 依賴了 chromium,而 chromium 又依賴一些系統庫。所以 npm install 后,還會觸發下載 chromium 的操作。這里用戶經常遇到的問題,主要是:

  • 由于 chromium 的體積比較大,所以經常遇到網絡問題導致下載失敗。
  • npm 僅僅只下載 chromium,chromium 依賴的系統庫并不會自動安裝。用戶還需要自行查找缺失的依賴進行安裝。
  • Fun 做的優化主要是:

  • 通過檢測網絡環境,對于國內用戶,會幫助配置淘寶 NPM 鏡像實現加速下載的效果。
  • 自動為用戶安裝 chromium 所缺失的依賴庫。
  • Fun 是如何把大依賴部署到函數計算的?不是有代碼包大小的限制嗎?

    基本上所有的 FaaS 為了優化函數冷啟動,都會加入函數代碼包大小的限制。函數計算也不例外。但是,Fun 通過內置 NAS(阿里云文件存儲) 解決方案,可以一鍵幫用戶創建、配置 NAS,并上傳依賴到 NAS 上。而函數計算在運行時,可以自動從 NAS 讀取到函數依賴。

    為了幫助用戶自動化地完成這些操作,Fun 內置了一個向導(3.1.1 版本僅支持 node,后續會支持更多,歡迎 [github issue?](https://statistics.functioncompute.com/?title=有了 serverless,前端也可以快速開發一個 Puppeteer 網頁截圖服務&src=article&author=小默&url=https://yq.aliyun.com/go/articleRenderRedirect?url=https://github.com/alibaba/funcraft/issues)提需求),在檢測到代碼體積大小超過平臺限制時,會提示是否由 Fun 將其改造成 NAS 的方案,整個向導的邏輯如下:

  • 詢問是否使用 Fun 來自動化的配置 NAS 管理依賴?(如果回答是,則進入向導,回答否,則繼續發布流程)
  • 檢測用戶的 yml 中是否已經配置了 NAS
  • 如果已經配置,則提示用戶選擇已經配置的 NAS 存儲函數依賴
  • 如果沒有配置,則提示用戶是否使用[NasConfig: Auto](https://statistics.functioncompute.com/?title=有了 serverless,前端也可以快速開發一個 Puppeteer 網頁截圖服務&src=article&author=小默&url=https://yq.aliyun.com/articles/712693)自動創建 NAS 配置
  • 如果選擇了是,則幫助用戶自動配置 nas、vpc 資源。
  • 如果選擇了否,則列出用戶當前 NAS 控制臺上已經有的 NAS 資源,讓用戶選擇
  • 無論上面使用哪種方式,最終都會在 template.yml 生成 NAS 以及 VPC 相關的配置
  • 根據語言檢測,比如 node runtime,會將 node_modules 以及 .fun/root 目錄映射到 nas 目錄(通過 .nas.yml 實現)
  • 自動執行 fun nas sync 幫用戶把本地的依賴上傳到 NAS 服務
  • 自動執行 fun deploy,幫用戶把代碼上傳到函數計算
  • 提示幫助信息,對于 HTTP Trigger 的,提示函數的 Endpoint,直接打開瀏覽器訪問即可看到效果
  • 是否可以指定 puppeteer 的版本?

    可以的,只需要修改 package.json 中的 puppeteer 的版本,重新安裝即可。

    函數計算實例中的時區采用的 UTC,是否有辦法改為北京時間?

    某些網頁的顯示效果是和時區掛鉤的,時區不同,可能會導致顯示的內容有差異。使用本文介紹的方法,可以非常容易的使用 puppeteer 的最新版本,而在 puppeteer 的最新版本 2.0 提供了一個新的 API [page.emulateTimezone(timezoneId)](https://statistics.functioncompute.com/?title=有了 serverless,前端也可以快速開發一個 Puppeteer 網頁截圖服務&src=article&author=小默&url=https://github.com/puppeteer/puppeteer/blob/v2.0.0/docs/api.md?spm=a2c4e.10696291.0.0.6b9c19a4BsT3qZ#pageemulatetimezonetimezoneid) , 可以非常容易的修改時區。

    如果 Puppeteer 后續版本更新后,依賴更多的系統依賴,本文介紹的方法還適用嗎?

    Fun 內置了 .so 缺失檢測機制,當在本地調試運行時,會智能地根據報錯識別出缺失的依賴庫,然后精準地給出安裝命令,可以做到一鍵安裝。

    如果添加了新的依賴,如何更新?

    如果添加了新的依賴,比如 node_modules 目錄添加了新的依賴庫,只需要重新執行 fun nas sync 進行同步即可。

    如果修改了代碼,只需要使用 fun deploy 重新部署即可。由于大依賴和代碼通過 NAS 進行了分離,依賴通常不需要頻繁變化,所以調用的頻率比較低,而 fun deploy 的由于沒有了大依賴

    除了本文介紹的方法還有哪些方法可以一鍵安裝 puppeteer?

    Fun 提供了非常多的依賴安裝方式,除了本文介紹的將依賴直接聲明在 package.json 中,然后通過 fun install -d 的方式安裝外,還有很多其他方法,他們均有各自適用的場景:

  • [命令式安裝](https://statistics.functioncompute.com/?title=有了 serverless,前端也可以快速開發一個 Puppeteer 網頁截圖服務&src=article&author=小默&url=https://yq.aliyun.com/articles/719100)。比如 fun install -f functionName -p npm puppeteer。這種安裝方式的好處是即使對 fun 不了解的用戶也可以傻瓜式的使用。
  • [聲明式安裝](https://statistics.functioncompute.com/?title=有了 serverless,前端也可以快速開發一個 Puppeteer 網頁截圖服務&src=article&author=小默&url=https://yq.aliyun.com/articles/719100)。這種安裝方式的好處是提供了類 Dockerfile 的體驗,Dockerfile 的大部分指令在這里都是可以直接使用的。通過這種方式聲明的依賴,可以通過直接提交到版本倉庫。他人拉取代碼后,也可以一鍵安裝所有依賴。
  • [交互環境安裝](https://statistics.functioncompute.com/?title=有了 serverless,前端也可以快速開發一個 Puppeteer 網頁截圖服務&src=article&author=小默&url=https://yq.aliyun.com/articles/716663)。這種安裝方式的好處是提供了類似傳統物理機的安裝體驗。在交互環境中,大部分 linux 命令都是可以使用的,而且可以不斷試錯。
  • 總結

    本文介紹了一種比較簡單易行地從零開始搭建分布式 Puppeteer Web 服務的方法。利用該方法,可以做到不需要關心如何安裝依賴、也不需要關系如何上傳依賴,順滑地完成部署。

    部署完成后,即可享受函數計算帶來的優勢,即:

    • 無需采購和管理服務器等基礎設施,只需專注業務邏輯的開發,可以大幅縮短項目交付時間和人力成本
    • 提供日志查詢、性能監控、報警等功能快速排查故障
    • 免運維,毫秒級別彈性伸縮,快速實現底層擴容以應對峰值壓力,性能優異
    • 成本極具競爭力

    “阿里巴巴云原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦云原生流行技術趨勢、云原生大規模的落地實踐,做最懂云原生開發者的技術圈。”

    總結

    以上是生活随笔為你收集整理的有了 serverless,前端也可以快速开发一个 Puppeteer 网页截图服务的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 欧美三级三级三级爽爽爽 | www.色日本 | 久久亚州 | 亚洲五月婷婷 | 亚洲人 女学生 打屁股 得到 | 波多野结衣不卡 | 国产免费一区二区三区在线播放 | 精品96久久久久久中文字幕无 | 精品人妻一区二区三区蜜桃 | 中文字幕精品一区二区三区精品 | 国产精品偷乱一区二区三区 | 黄色高清在线观看 | 免费在线看黄的网站 | av有声小说一区二区三区 | 男女超爽视频免费播放 | 日本视频久久 | 中文字幕一区二区三区四区欧美 | 秋霞在线一区 | 免费黄色大片网站 | 日韩毛片免费观看 | 很黄很黄的网站 | 欧美一级看片 | 国产黑丝在线观看 | 女生被草 | 国产福利一区二区三区在线观看 | 91免费污视频 | 操一操日一日 | 五月天亚洲色图 | 亚欧美一区二区三区 | 在线视频精品免费 | 大桥未久在线视频 | 天堂av中文在线观看 | 一卡二卡三卡四卡在线 | 欧美人妻精品一区二区 | 欧洲一区二区在线 | 欧美日本不卡 | 国产亚洲二区 | 明星双性精跪趴灌满h | www一区二区 | 免费一区二区在线观看 | 伊人精品在线观看 | 少妇真实被内射视频三四区 | 亚洲人妖在线 | 性色av一区二区三区免费 | 伊人论坛 | 嫩草视频在线观看视频 | 国产免费播放 | 麻豆社 | 污视频网站在线 | 在线观看国产区 | 免费在线h | 高潮av在线 | 亚洲成人国产精品 | 欧美少妇一区二区三区 | 国产区一区二 | 91视频免费网站 | 午夜不卡影院 | 丝袜国产在线 | 国产成人精品a视频 | 成人av一区二区三区 | 裸体毛片| 91亚洲视频在线 | 黑人操日本女优 | 欧美三极片 | 俺啪也 | 给我看高清的视频在线观看 | 婷婷丁香花五月天 | 日韩一级理论片 | 欧美一级性视频 | 神马久久av | 豆豆色成人网 | 91蝌蚪| 91伦理在线 | 午夜精品久久久久久久96蜜桃 | 欧美一区在线观看视频 | 午夜免费福利网站 | 日皮视频免费看 | 精品人妻一区二区免费 | 亚洲激情网址 | 69精品久久久久久 | 亚洲人人插 | 波多野结衣在线看 | 欧美大胆视频 | 中文字幕欧美人妻精品一区蜜臀 | 扒开伸进免费视频 | 美女国产一区 | 999色综合 | 欧美老熟妇喷水 | 在线观看黄色av | 日本成人动漫在线观看 | 在线免费观看视频网站 | 亚欧成人精品一区二区 | 一本一道人人妻人人妻αv 九一在线视频 | 欧美日韩一区二区三区在线电影 | 枫花恋在线观看 | 精品国产露脸精彩对白 | 午夜伦理剧场 | 麻豆国产在线 | 中文字幕视频在线观看 |