在AWS Lambda函数中使用PuppeteerSharp。

问题描述 投票:3回答:1

我有一个用于亚马逊Echo的技能。lambda函数是用C#.Net Core编写的,并托管在AWS上。我现在需要用使用PuppeteerSharp的功能来扩展它。我的第一个问题是,它下载chromium,并默认将其放在你的应用程序的目录中。这给了我一个错误,因为文件系统是只读的。然后我试着用HeadlessChromium.Puppeteer.Lambda.Dotnet包,但我的技能太大,无法作为lambda函数上传,因为它现在已经嵌入了chromium。

我现在尝试使用BrowserFetchOption覆盖默认的Puppeteer下载路径。这让我可以将AWS上的chromium下载到系统临时路径,但Puppeteer却找不到它。当我试图启动puppeteer时,我需要将ExecutablePath添加到LaunchOptions对象中。我已经在windows下进行了本地测试,它可以工作,我现在只需要写一些通用代码来寻找AWS下的chromium可执行文件。

  1. 有没有比在我的下载路径下搜索chrome或chrome.exe更好的方法(我需要它在windows下以及AWS下运行,用于单元测试)?感觉如果Puppeteer提供了这对选项,那么一定有更好的方法来使用它们?
  2. 有没有比我现在尝试的更好的方法在lambda函数中使用Puppeteer?

下面是目前工作的windows代码,硬生生的编了chrome路径。

            string cpath = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "chromium");

            var bfopt = new BrowserFetcherOptions() { Path = cpath };

            await new BrowserFetcher(bfopt).DownloadAsync(BrowserFetcher.DefaultRevision);

            var browser = await Puppeteer.LaunchAsync(new LaunchOptions { 
                ExecutablePath=System.IO.Path.Combine(cpath, "Win64-674921\\chrome-win\\chrome.exe"),
                Headless = true
            });
c# aws-lambda puppeteer alexa puppeteer-sharp
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.