如何正确预加载js文件?

问题描述 投票:0回答:1

我有以下节点js文件调用

evaluateOnNewDocument().

const StealthPlugin = require('puppeteer-extra-plugin-stealth')
puppeteer.use(StealthPlugin())

const fs = require('fs')

const preldpath = process.argv[2];
const url = process.argv[3];
const pdfpath = process.argv[4];

(async () => {
    const browser = await puppeteer.launch({headless: 'new'});
    const page = await browser.newPage();
    const preloadFile = fs.readFileSync(preldpath, 'utf8');
    await page.evaluateOnNewDocument(preloadFile);
    await page.goto(url, {waitUntil: 'networkidle2'});
    await page.pdf({path: pdfpath});
    await browser.close();
})();

预加载文件如下所示。

Object.defineProperty(navigator, "languages", {
  get: function() {
    return ["fr-ca", "fr"];
  };
});

我使用带有预加载javascript文件的nodejs脚本打开以下html文件,语言仍然保持默认并且没有更改为“fr-ca fr”。如何预加载 JavaScript 文件以使

navigator.languages
与默认值不同?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Navigator Languages</title>
</head>
<body>
    <h1>Your Preferred Languages:</h1>
    <p id="language-output"></p>

    <script>
        const languageOutput = document.getElementById('language-output');
        languageOutput.textContent = navigator.languages.join(', ');
    </script>
</body>
</html>
puppeteer
1个回答
0
投票

根据评论,听起来您只是想让

evaluateOnNewDocument
工作,而不关心覆盖导航器语言。这不是最好的选择,因为无论 Puppeteer 如何,它似乎都不起作用,更不用说
evaluateOnNewDocument
。这是一个没有它的最小示例:

const puppeteer = require("puppeteer"); // ^22.7.1

let browser;
(async () => {
  const url = "https://www.example.com";
  browser = await puppeteer.launch();
  const [page] = await browser.pages();
  await page.evaluateOnNewDocument("foo = 42");
  await page.goto(url, {waitUntil: "domcontentloaded"});
  console.log(await page.evaluate("foo"));
})()
  .catch(err => console.error(err))
  .finally(() => browser?.close());
© www.soinside.com 2019 - 2024. All rights reserved.