我正在使用AWS Lambda + Puppeteer + Handlebars在运行时生成PDF。我正在动态创建 HTML,需要设置 cookie 以便在创建 PDF 之前在 HTML 页面中呈现一些图像。
木偶师 v4.0.0 节点 v12.x
我遇到了两个问题:
- page.setCookie(( 不起作用
- 我有要应用于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
- 您应该按以下顺序使用
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>');
(,您可以在以后设置内容。
- 你在
httpOnly
中也有错别字(这不是httponly
! - 实际上,
'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