NodeJS 无法在无头 puppet 师会话中加载扩展

00jrzges  于 2023-10-17  发布在  Node.js
关注(0)|答案(1)|浏览(171)

我正在尝试使用puppeteer将扩展(I dont care about cookies)加载到Chrome中。清单文件和扩展的其余部分位于目录中

  1. ./chrome-extensions/fihnjjcciajhdojfnbdddfaoknhalnja/3.4.9_0

在项目本身。我加载这个特定的扩展只禁用所有其他以防万一。
下一步,我打开一个页面,并希望导航到Chrome会话中的扩展程序。
这似乎在不同的系统上以不同的方式完成。在MacOS上,这看起来像

  1. 'chrome://extensions/?id=fihnjjcciajhdojfnbdddfaoknhalnja'

但我正在一台无头的Ubuntu / Linux机器上远程运行puppeteer。
当我运行下面的代码时,它无法转到扩展链接。
在Chrome/Ubuntu/Linux中,正确的扩展链接是什么?

  1. const puppeteer = require("puppeteer");
  2. const idontcarecookies = './chrome-extensions/fihnjjcciajhdojfnbdddfaoknhalnja/3.4.9_0'
  3. puppeteer.launch({ headless: true, devtools: true,
  4. args: [
  5. '--disable-extensions-except=${idontcarecookies}',
  6. '--load-extension=${idontcarecookies}'
  7. ] }).then(async (browser) => {
  8. try {
  9. console.log('==>Navigate to Extension');
  10. const page = await browser.newPage();
  11. // Navigate to extension page
  12. // await page.goto('chrome-extension://fihnjjcciajhdojfnbdddfaoknhalnja/panel.html');
  13. await page.goto('chrome://extensions/?id=fihnjjcciajhdojfnbdddfaoknhalnja');
  14. // Take a screenshot of the extension page
  15. console.log('==>Take Screenshot');
  16. await page.screenshot({path: 'chrome-extension.png'});
  17. await browser.close();
  18. console.log(`All done`);
  19. } catch (error) {
  20. console.error(error);
  21. process.exit();
  22. } finally {
  23. browser.close();
  24. }
  25. });

这是我得到的错误,但我改变了网址的扩展

  1. ==>Navigate to Extension
  2. Error: net::ERR_INVALID_URL at chrome://extensions/?id=fihnjjcciajhdojfnbdddfaoknhalnja
  3. at navigate (/pathproject/node_modules/puppeteer/lib/FrameManager.js:120:37)
  4. at processTicksAndRejections (internal/process/task_queues.js:97:5)
  5. at async FrameManager.navigateFrame (/pathproject/node_modules/puppeteer/lib/FrameManager.js:94:17)
  6. at async Frame.goto (/pathproject/node_modules/puppeteer/lib/FrameManager.js:406:12)
  7. at async Page.goto (/pathproject/node_modules/puppeteer/lib/Page.js:672:12)
  8. at async /pathproject/test-extension.js:28:5
  9. -- ASYNC --
  10. at Frame.<anonymous> (/pathproject/node_modules/puppeteer/lib/helper.js:111:15)
  11. at Page.goto (/pathproject/node_modules/puppeteer/lib/Page.js:672:49)
  12. at Page.<anonymous> (/pathproject/node_modules/puppeteer/lib/helper.js:112:23)
  13. at /pathproject/test-extension.js:28:16
  14. at processTicksAndRejections (internal/process/task_queues.js:97:5)
zwghvu4y

zwghvu4y1#

失败的原因其实并不明显。将扩展的文件夹复制到项目的本地目录时,请确保正确设置了“permissioning”。
我将权限设置为Chrome目录,即root:staff,因此在本例中,我将其更改为我的用户名:staff,然后它就开始工作了!
我使用以下参数来避免${}

  1. '--disable-extensions-except=chrome-extensions/idontcare',
  2. '--load-extension=chrome-extensions/idontcare'

其中文件夹“idontcare”是其中包含manifest.json的扩展的文件夹。
和PS。去Chrome:扩展与无头:真不会工作。使用puppeteer查找扩展页面仅在headless:false模式下有效。这样你就可以看到你的扩展是否被加载(滑动条是开或关),如果扩展的目录被正确设置,它应该自动打开。
使用

  1. await page.goto('chrome://extensions/');

在headless:false模式下检查扩展名。
同时升级到最新的节点版本。我使用的是版本12,扩展不工作,但与版本20,它是拿起扩展,它甚至是屏幕截图在无头:“新”模式。因此,可以使用Node 20检查是否加载了扩展。

相关问题