AWS Lambda + Puppeteer page.setCookie() 不起作用 &自定义字体未应用。



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

木偶师 v4.0.0 节点 v12.x

我遇到了两个问题:

  1. page.setCookie(( 不起作用
  2. 我有要应用于PDF的自定义字体 - 我已经复制了字体并将字体配置放在fonts文件夹中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(),否则木偶师将在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(或至少是一个数据URI,如:await page.goto('data:text/html,<h1>Template</h1>');(,您可以在以后设置内容。

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

>字体这取决于您如何使用环境变量。我想它们是从 Node.js 脚本传递到车把模板的。 确保像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

最新更新