AWS Lambda + Puppeteer cookies - page.setCookie() 不工作&自定义字体没有得到应用

AWS Lambda + Puppeteer cookies - page.setCookie() not working & custom fonts not getting applied

我在 运行 时使用 AWS Lambda + Puppeteer + Handlebars 生成 PDF。我正在动态创建 HTML 并且需要设置 cookie 以便在创建 PDF 之前在 HTML 页面中呈现一些图像。

木偶师 v4.0.0 节点 v12.x

我有 运行 两期:

  1. page.setCookie() 不工作
  2. 我有要应用于 PDF 的自定义字体 - 我已复制字体并将字体配置放在字体文件夹中,并将 FONTCONFIG_PATH env 变量设置为 /var/task/fonts(这似乎在 PhantomJS 中有效但不是 Chrome 无头)。

我已经尝试了所有可能的方法 page.setCookie() 但它似乎没有用。

代码:

const page = await browser.newPage();
var pdfCookies = {
    "name": "edge-auth", // required
    "value": conf["edge-auth"], // required
    "domain": ".abc.com",
    "path": "/",
    "httponly": true,
    "secure": true
};
await page.setCookie(pdfCookies);
await page.setContent(data, {waitUntil:'networkidle0'});

我为“await page.cookies()”添加了一个控制台日志 - 但我得到一个空白数组 [] 作为输出。

任何帮助将不胜感激。

page.setCookie

  1. 您应该按以下顺序使用 page.setCookies(),否则 puppeteer 将在 about:blank 页面上设置所需的 cookie:
const page = await browser.newPage();
await page.goto(url);

const pdfCookies ={
  'name': 'edge-auth',
  'value': conf["edge-auth"],
  'path': '/',
//'domain': '.abc.com',
  'httpOnly': true,
  'secure': true
}

await page.setCookie(pdfCookies);

const cookies = await page.cookies(url);
console.log(JSON.stringify(cookies));

我建议打开任何 URL(或至少像 await page.goto('data:text/html,<h1>Template</h1>'); 这样的数据 URI),您可以稍后在其中设置内容。

  1. 您在 httpOnly 中也有错字(不是 httponly!)
  2. 实际上 'domain':'.abc.com' 对导致空数组。在我看来这是一个 CORS 问题。

字体

这取决于您如何使用环境变量。我想它们是从 Node.js 脚本传递到 Handlebars 模板的。 确保像 process.env.FONTCONFIG_PATH 一样使用它们。您可以在脚本的开头用 ˙console.log()˙ 来查看它是否对您的环境可见,或者它是否具有正确的值。

您应该像这样使用 cookie:

    const pdfCookies =[{
  'name': 'edge-auth',
  'value': conf["edge-auth"],
  'path': '/',
//'domain': '.abc.com',
  'httpOnly': true,
  'secure': true
}]

然后他们应该工作

这是 Puppeteer Docs 给出的定义


const pdfCookies ={
  'name': 'version',
  'value':"2",
  'url':"https://examplke.com"
}

const browser = await puppeteer.launch({
        headless: false,
        devtool: true,
    });


let page1 = await browser.newPage();
            await page1.setCookie(pdfCookies);
            await page1.goto(each);

https://pptr.dev/#?product=Puppeteer&version=v1.12.2&show=api-pagesetcookiecookies