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

命令行批量截圖Node腳本示例代碼

 更新時(shí)間:2026年02月07日 15:17:00   作者:fantasticbaby  
這篇文章主要給大家介紹了關(guān)于命令行批量截圖Node腳本的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

批量截圖任務(wù)

作為一個(gè)軟件工程師,不只是做好自己的本職工作(iOS),而是需要解決項(xiàng)目中的技術(shù)問(wèn)題。這次就是解決自動(dòng)截圖的問(wèn)題

早期公司的數(shù)據(jù)工程師利用 phantomjs 來(lái)截圖,后期不斷發(fā)現(xiàn)截圖效率低,加之開(kāi)發(fā)者團(tuán)隊(duì)不再維護(hù),因此決定將截圖這部分跟你剝離開(kāi)來(lái),以后方便開(kāi)發(fā)維護(hù)。我就承擔(dān)了這個(gè)工作

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.

安裝問(wèn)題

一開(kāi)始按照往常的套路(npm install --save puppeteer) 好幾次都卡住了,后期查找資料發(fā)現(xiàn)切換到國(guó)內(nèi)的鏡像就可以順利下載

PUPPETEER_DOWNLOAD_HOST=https://storage.googleapis.com.cnpmjs.org npm i --save puppeteer
  • To use Puppeteer in your project, run:
PUPPETEER_DOWNLOAD_HOST=https://storage.googleapis.com.cnpmjs.org npm i --save puppeteer
  • Install some basic packages
npm install

Usage

const puppeteer = require('puppeteer'),
  fs = require('fs'),
  path = require('path'),
  request = require('request')

function mkdirsSync(dirname) {
 if (fs.existsSync(dirname)) {
 return true
 } else {
 if (mkdirsSync(path.dirname(dirname))) {
  fs.mkdirSync(dirname)
  return true
 }
 }
}

var snapShotFolerPath = path.join(__dirname, '../snspshot/')
mkdirsSync(snapShotFolerPath)

 function snapShot (taskInfo) {
 return new Promise(function (resolve, reject) {

 (async function(){
  // 啟動(dòng)Chromium
  const browser = await puppeteer.launch({ignoreHTTPSErrors: true, headless:true, args: ['--no-sandbox']})
  // 打開(kāi)新頁(yè)面
  const page = await browser.newPage()
  // 設(shè)置頁(yè)面分辨率
  await page.setViewport({width: 1920, height: 1080})

  // 訪問(wèn)
  await page.goto(taskInfo.websiteUrl, {waitUntil: 'domcontentloaded'}).catch(err => console.log(err))
  await page.waitFor(1000)

  try {
  // 截圖
  await page.screenshot({path: snapShotFolerPath + taskInfo.imageName, fullPage:true}).catch(err => {
   console.log('截圖失敗: ' + err)
  });
  await page.waitFor(6000)
  } catch (e) {
  console.log('failed ' + e)
  } finally {
  await browser.close()

  fs.stat(snapShotFolerPath + taskInfo.imageName, function(err,stats){
   if (err) {
   reject('fail')
   } else {                         
   if (stats.isFile()) {
    resolve('success')
   }
   }
  })
  }

 })()
 })
}

module.exports = snapShot

如何安裝 (Linux 、Unix 操作系統(tǒng))

  • 執(zhí)行 npm install
  • 執(zhí)行 npm start

如果你沒(méi)有翻環(huán)境

  • 打開(kāi) package.json 文件,檢查 dependencies 項(xiàng)目,如果 key 為 puppeteer 的條目,先刪除該條目。
  • 進(jìn)入工程命令行,輸入 PUPPETEER_DOWNLOAD_HOST=https://storage.googleapis.co... npm i --save puppeteer
  • 執(zhí)行 npm install 命令
  • 執(zhí)行 npm start

流程說(shuō)明

while 循環(huán)去調(diào)用接口去獲取當(dāng)前的截圖任務(wù)

  • 在有截圖任務(wù)情況下繼續(xù)截圖
  • 沒(méi)有截任務(wù)的情況下,為了避免浪費(fèi)資源,程序休眠10分鐘后繼續(xù)下一次的獲取截圖任務(wù)
  • 如果遇到調(diào)用截圖任務(wù)接口500錯(cuò)誤,則強(qiáng)制停止截圖任務(wù),相應(yīng)的服務(wù)端工程師去查詢失敗原因

如果有截圖任務(wù)那么就去截圖

  • 截圖后將截圖圖片保存到文件夾,命令為當(dāng)前日期 yyyy-MM-dd-hh-mm-ss-S 格式。然后將結(jié)果上傳到服務(wù)端
  • 截圖失敗將當(dāng)前任務(wù)結(jié)果保存到本地 failedTasks.json 文件夾一份,然后上傳到服務(wù)端

截圖成功不管失敗還是成功都去通知服務(wù)端。如果失敗將當(dāng)前任務(wù)告訴服務(wù)端,如果成功將當(dāng)前任務(wù)信息和截圖成功的絕對(duì)路徑告訴服務(wù)端

一些說(shuō)明

Demo 中執(zhí)行 npm start 真正執(zhí)行的是 quickStart.js 中的代碼。完整的“獲取截圖任務(wù)、截圖、截圖上傳到OSS、失敗則將失敗任務(wù)上傳到服務(wù)”邏輯在 index.js 文件中

  • 工程是在沒(méi)有提供真正的接口獲取任務(wù),而是采用隨機(jī)數(shù)獲取截圖任務(wù)
  • 截圖成功后將結(jié)果上傳到OSS這一個(gè)步驟是沒(méi)有的,采用 log 出來(lái)
  • 失敗的上傳也是不存在的,log 打印而已

todoList

  • 多線程高效率的去截圖
  • 一些寫法暫時(shí)比較粗糙,不優(yōu)雅,待改進(jìn)
  • puppeteer 很強(qiáng)大,大家可以去研究下

代碼地址 (本地下載

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Node.js中readline模塊實(shí)現(xiàn)終端輸入

    Node.js中readline模塊實(shí)現(xiàn)終端輸入

    本文主要介紹了Node.js中readline模塊實(shí)現(xiàn)終端輸入,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 解決node終端下運(yùn)行js文件不支持ES6語(yǔ)法

    解決node終端下運(yùn)行js文件不支持ES6語(yǔ)法

    這篇文章主要介紹了解決node終端下運(yùn)行js文件不支持ES6語(yǔ)法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • koa框架的原理、功能,與基本使用方法概述

    koa框架的原理、功能,與基本使用方法概述

    這篇文章主要介紹了koa框架的原理、功能,與基本使用方法,結(jié)合實(shí)例形式分析了koa框架的基本功能、原理、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2023-04-04
  • Node.js  事件循環(huán)詳解及實(shí)例

    Node.js 事件循環(huán)詳解及實(shí)例

    這篇文章主要介紹了 Node.js 事件循環(huán)詳解及實(shí)例的相關(guān)資料,Node.js 有多個(gè)內(nèi)置的事件,我們可以通過(guò)引入 events 模塊,并通過(guò)實(shí)例化 EventEmitter 類來(lái)綁定和監(jiān)聽(tīng)事件,需要的朋友可以參考下
    2017-08-08
  • Node.js搭建小程序后臺(tái)服務(wù)

    Node.js搭建小程序后臺(tái)服務(wù)

    最近在做微信的應(yīng)用號(hào)小程序開(kāi)發(fā),小程序的后臺(tái)數(shù)據(jù)接口需要https安全請(qǐng)求,所以需要我的nodejs服務(wù)器能夠提供https的支持,現(xiàn)在就將整個(gè)https服務(wù)器的搭建過(guò)程說(shuō)一下
    2018-01-01
  • Node?ORM項(xiàng)目中使用Sequelize實(shí)例詳解

    Node?ORM項(xiàng)目中使用Sequelize實(shí)例詳解

    這篇文章主要為大家介紹了Node?ORM項(xiàng)目中使用Sequelize實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • nodejs?實(shí)現(xiàn)簡(jiǎn)單的文件上傳功能(示例詳解)

    nodejs?實(shí)現(xiàn)簡(jiǎn)單的文件上傳功能(示例詳解)

    這篇文章主要介紹了nodejs?實(shí)現(xiàn)簡(jiǎn)單的文件上傳功能,文件上傳方式分為三種,本文通過(guò)實(shí)例代碼給大家詳細(xì)介紹,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Node.js系列之安裝配置與基本使用(1)

    Node.js系列之安裝配置與基本使用(1)

    這篇文章主要為大家詳細(xì)介紹了Node.js系列之安裝配置與基本使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • nodejs實(shí)現(xiàn)bigpipe異步加載頁(yè)面方案

    nodejs實(shí)現(xiàn)bigpipe異步加載頁(yè)面方案

    本文給大家分享的是使用nodejs結(jié)合bigpipe實(shí)現(xiàn)異步加載頁(yè)面的方案,非常的實(shí)用,也是以后前端性能優(yōu)化的一個(gè)方向,希望大家能夠喜歡。
    2016-01-01
  • Node.js 多線程實(shí)戰(zhàn)小結(jié)

    Node.js 多線程實(shí)戰(zhàn)小結(jié)

    在?Node.js?的世界中,多線程技術(shù)一直是一個(gè)受到廣泛關(guān)注的領(lǐng)域,本文主要介紹了Node.js 多線程實(shí)戰(zhàn)小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01

最新評(píng)論

象山县| 乌海市| 报价| 志丹县| 固镇县| 云安县| 北安市| 阿鲁科尔沁旗| 九寨沟县| 九寨沟县| 兴国县| 平果县| 茌平县| 沈阳市| 漳州市| 读书| 专栏| 阿城市| 辛集市| 永州市| 安徽省| 青龙| 安岳县| 古浪县| 高安市| 大邑县| 瑞丽市| 闽侯县| 淮阳县| 方山县| 健康| 陈巴尔虎旗| 洱源县| 化州市| 红河县| 沁水县| 修文县| 和平区| 三穗县| 安庆市| 子洲县|