0

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

Puppeteer v4.0.0 节点 v12.x

我遇到了2个问题:

  1. page.setCookie() 不工作
  2. 我有要应用于 PDF 的自定义字体 - 我已复制字体并将字体配置放置在字体文件夹中,并将 FONTCONFIG_PATH 环境变量设置为 /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()”添加了一个控制台日志——但我得到一个空白数组 [] 作为输出。

任何帮助将不胜感激。

4

3 回答 3

0

page.setCookie

  1. 您应该page.setCookies()按以下顺序使用,否则 puppeteer 会在页面上设置所需的 cookie about:blank
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(或至少一个 Data URI,如:)await page.goto('data:text/html,<h1>Template</h1>');,您可以稍后在其中设置内容。

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

字体

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

于 2020-06-28T14:04:15.887 回答
0

您应该像这样使用 cookie:

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

然后他们应该工作

于 2020-06-28T14:14:19.713 回答
0

这是 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

于 2020-10-15T10:17:13.543 回答