【问题标题】:How to get angular google-charts to puppeteer如何将角度谷歌图表获取到 puppeteer
【发布时间】:2020-05-05 05:50:43
【问题描述】:

我有一个角度应用程序,它使用 google-chart 角度包装器来生成用于报告目的的图表。此示例 Angular 应用程序从 elasticsearch 查询(REST Api 调用)获取数据。 Angular 应用程序运行良好,并且在页面加载时生成了 google-chart 视觉元素。现在我想使用 puppeteer 生成这些图表的 pdf。但是 puppeteer 不包含 pdf 中的谷歌图表元素。

最初我认为问题在于对 elasticsearch 的 Rest API 调用,可能是 puppeteer 在 api 调用返回之前获取页面。因此,我添加了足够的延迟来检查这个问题(我的 elasticserch api 调用会在几秒钟内返回,因为我正在测试非常基本的场景)。即使我添加了很大的延迟问题仍然存在。

这是我的测试代码

const puppeteer = require('puppeteer');

(async () => {
const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']})
const page = await browser.newPage()

await page.goto('http://localhost:4200/',  {waitUntil: 'networkidle2'})
await page.waitFor(50000);
await page.pdf({ path: 'api.pdf', format: 'A4' })

await browser.close()
})()

有什么办法可以让它工作吗?

编辑

我已经尝试过使用静态数据并且成功生成了谷歌图表。因此它应该与 REST 调用有关。任何调查方向都非常感谢。

【问题讨论】:

    标签: angular google-visualization puppeteer


    【解决方案1】:

    如果有人遇到这种情况,以下会有所帮助。问题是弹性搜索的 CORS 失败。为了弄清楚我使用了 headless=false 模式。也为了让它工作禁用了安全性,所以 CORS 不会失败。

    const browser = await puppeteer.launch({
        headless: true,
        args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-web-security']
    })
    

    【讨论】:

    • 如何让 Angular/Puppeteer 应用程序无头?我看到的所有示例都使用ng test app 启动应用程序,但我不想测试它,我想用它在服务器端生成 PDF/图像。
    • @ps0604 以上代码启动 puppeteer 无头 (headless: true)
    • 但是如何在命令行中启动 puppeteer?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多