我有亚马逊 Echo 的技能。lambda 函数是用 C#/.Net Core 编写的,并托管在 AWS 上。我现在需要使用使用 PuppeteerSharp 的功能来扩展它。我的第一个问题是它会下载 chromium 并默认将其放在应用程序的目录中。这给了我一个错误,因为文件系统是只读的。然后我尝试了包 HeadlessChromium.Puppeteer.Lambda.Dotnet,但我得到的技能太大而无法作为 lambda 函数上传,因为它现在嵌入了铬。
我现在正在尝试使用 BrowserFetchOption 覆盖默认的 puppeteer 下载路径。这允许我将 AWS 上的 chromium 下载到系统临时路径,但是 Puppeteer 找不到它。当我尝试启动 puppeteer 时,我需要将 ExecutablePath 添加到 LaunchOptions 对象。我已经在 windows 下本地测试了它并且它可以工作,我现在只需要编写一些通用代码来找到 AWS 下的 chromium 可执行文件。
- 有没有比在我的下载路径下搜索 chrome 或 chrome.exe 更好的方法(我需要它在 windows 和 AWS 下运行以进行单元测试)?感觉如果 Puppeteer 提供了这对选项,那么一定有更好的方法来使用它们?
- 有没有比我尝试的更好的方法在 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
});