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

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

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

./chrome-extensions/fihnjjcciajhdojfnbdddfaoknhalnja/3.4.9_0

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

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

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

const puppeteer = require("puppeteer");
const idontcarecookies = './chrome-extensions/fihnjjcciajhdojfnbdddfaoknhalnja/3.4.9_0'
puppeteer.launch({ headless: true, devtools: true,
args: [
    '--disable-extensions-except=${idontcarecookies}',
    '--load-extension=${idontcarecookies}'
        ] }).then(async (browser) => {
try {
    console.log('==>Navigate to Extension');
    const page = await browser.newPage();
    // Navigate to extension page
    //    await page.goto('chrome-extension://fihnjjcciajhdojfnbdddfaoknhalnja/panel.html');
    await page.goto('chrome://extensions/?id=fihnjjcciajhdojfnbdddfaoknhalnja');
    // Take a screenshot of the extension page
    console.log('==>Take Screenshot');
    await page.screenshot({path: 'chrome-extension.png'});
    await browser.close();
    console.log(`All done`);
} catch (error) {
    console.error(error);
    process.exit();
} finally {
    browser.close();
}
});

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

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

zwghvu4y1#

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

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

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

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

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

相关问题