久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

如何將 puppeteer-core 與電子一起使用?

How to use puppeteer-core with electron?(如何將 puppeteer-core 與電子一起使用?)
本文介紹了如何將 puppeteer-core 與電子一起使用?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我從另一個 Stackoverflow 問題中得到了這段代碼:

I got this code from another Stackoverflow Question:

import electron from "electron";
import puppeteer from "puppeteer-core";

const delay = (ms: number) =>
  new Promise(resolve => {
    setTimeout(() => {
      resolve();
    }, ms);
  });

(async () => {
  try {
    const app = await puppeteer.launch({
      executablePath: electron,
      args: ["."],
      headless: false,
    });
    const pages = await app.pages();
    const [page] = pages;

    await page.setViewport({ width: 1200, height: 700 });
    await delay(5000);
    const image = await page.screenshot();
    console.log(image);
    await page.close();
    await delay(2000);
    await app.close();
  } catch (error) {
    console.error(error);
  }
})();

Typescript 編譯器抱怨 launch 方法選項對象的 executablePath 屬性,因為它需要是 string 類型而不是 Electron.那么如何將電子鉻可執行路徑傳遞給 puppeteer?

Typescript compiler complains about executablePath property of launch method options object cause it needs to be of type string and not Electron. So how to pass electron chromium executable path to puppeteer?

推薦答案

如果沒有一些變通方法和標志更改,您不能直接將電子可執行文件與 Puppeteer 一起使用.他們在 API 上有很多不同.特別是電子沒有鉻瀏覽器正常工作所需的所有 chrome.* API,許多標志仍然沒有適當的替代品,例如 無頭標志.

You cannot use electron executable with Puppeteer directly without some workarounds and flag changes. They have tons of differences in the API. Specially electron doesn't have all of the chrome.* API which is needed for chromium browser to work properly, many flags still doesn't have proper replacements such as the headless flag.

您將在下面看到兩種方法.但是你需要確保兩點,

Below you will see two ways to do it. However you need to make sure of two points,

  • 確保在啟動應用之前連接 puppeteer.
  • 確保為在 Electron 中運行的 Chrome 版本獲取正確的 puppeteer 或 puppeteer-core 版本!

有很多解決方法,但最近有一個 puppeteer-in-electron 包,它允許您使用電子在電子應用程序中運行 puppeteer.

There are lots of workarounds, but most recently there is a puppeteer-in-electron package which allows you to run puppeteer within electron app using the electron.

首先,安裝依賴,

npm install puppeteer-in-electron puppeteer-core electron

然后運行它.

import {BrowserWindow, app} from "electron";
import pie from "puppeteer-in-electron";
import puppeteer from "puppeteer-core";

const main = async () => {
  const browser = await pie.connect(app, puppeteer);

  const window = new BrowserWindow();
  const url = "https://example.com/";
  await window.loadURL(url);

  const page = await pie.getPage(browser, window);
  console.log(page.url());
  window.destroy();
};

main();

獲取調試端口并連接

另一種方法是獲取電子應用程序的遠程調試端口并連接到它.此解決方案由 trusktr on 共享電子論壇.

import {app, BrowserWindow, ...} from "electron"
import fetch from 'node-fetch'

import * as puppeteer from 'puppeteer'

app.commandLine.appendSwitch('remote-debugging-port', '8315')

async function test() {
    const response = await fetch(`http://localhost:8315/json/versions/list?t=${Math.random()}`)
    const debugEndpoints = await response.json()

    let webSocketDebuggerUrl = debugEndpoints['webSocketDebuggerUrl ']

    const browser = await puppeteer.connect({
        browserWSEndpoint: webSocketDebuggerUrl
    })

    // use puppeteer APIs now!
}

// ... make your window, etc, the usual, and then: ...

  // wait for the window to open/load, then connect Puppeteer to it:
  mainWindow.webContents.on("did-finish-load", () => { 
    test()
  })

上述兩種解決方案都使用 webSocketDebuggerUrl 來解決問題.

Both solution above uses webSocketDebuggerUrl to resolve the issue.

添加此注釋是因為大多數人使用電子捆綁應用程序.

Adding this note because most people uses electron to bundle the app.

如果要構建 puppeteer-core 和 puppeteer-in-electron,需要使用 hazardouselectron-builder 確保 get-port-cli 工作.

If you want to build the puppeteer-core and puppeteer-in-electron, you need to use hazardous and electron-builder to make sure get-port-cli works.

在 main.js 之上添加危險

Add hazardous on top of main.js

// main.js
require ('hazardous');

確保 get-port-cli 腳本已解壓,在 package.json 中添加以下內容

Make sure the get-port-cli script is unpacked, add the following on package.json

"build": {
  "asarUnpack": "node_modules/get-port-cli"
}

構建后的結果:

這篇關于如何將 puppeteer-core 與電子一起使用?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

How to fix BrowserWindow is not a constructor error when creating child window in Electron renderer process(在 Electron 渲染器進程中創建子窗口時如何修復 BrowserWindow 不是構造函數錯誤) - IT屋-程序員軟件開發技術
mainWindow.loadURL(quot;https://localhost:3000/quot;) show white screen on Electron app(mainWindow.loadURL(https://localhost:3000/) 在 Electron 應用程序上顯示白屏)
Electron webContents executeJavaScript : Cannot execute script on second on loadURL(Electron webContents executeJavaScript:無法在第二個 loadURL 上執行腳本)
how to use electron browser window inside components in angular-cli?(如何在angular-cli的組件內使用電子瀏覽器窗口?)
ElectronJS - sharing redux store between windows?(ElectronJS - 在 Windows 之間共享 redux 存儲?)
How to access camera/webcamera inside electron app?(如何在電子應用程序中訪問相機/網絡攝像頭?)
主站蜘蛛池模板: 欧洲精品一区 | 国产成人精品区一区二区不卡 | 国产精品永久免费视频 | 午夜电影福利 | 国产日韩精品视频 | 成人精品福利 | 国产一区二区精品在线 | 国产黄色在线 | 国产精品美女久久久久久久网站 | 99久久国产免费 | 欧美精品一区二区三区四区 在线 | 免费国产一区二区 | 一区二区在线免费观看视频 | 91亚洲精品国偷拍自产在线观看 | 亚洲成av人片在线观看无码 | 欧美一级在线观看 | 久久99精品久久 | 三级视频在线观看 | 九色.com | 91久久电影 | 一区二区三区四区电影视频在线观看 | 亚洲福利视频网 | 午夜免费影视 | 2019天天干夜夜操 | 午夜免费观看体验区 | 中文字幕免费在线 | 日韩综合网 | 天天色av| 免费精品 | 成人免费在线 | 欧美精品一二三区 | 爱综合| 羞视频在线观看 | 亚洲高清在线观看 | 国产96色在线 | 午夜不卡一区二区 | 国产成人精品久久久 | 欧美综合一区二区 | 日本午夜精品一区二区三区 | 四虎影院久久 | 在线免费国产 |