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