0

我正在开发可以渲染 Javascript 网站的网络爬虫,因此我决定使用 PupeeteerSharp,它是流行的 Node.JS 无头 Chrome 浏览器 Pupeeteer API 的 .NET 端口。我在 Windows 10 开发机器上运行 Service Fabric 的本地开发集群,并且在我的解决方案中有一个无状态服务。

Data在服务项目的文件夹下创建了文件PackageRoot夹并将.local-chromium文件夹内容放在那里(包含chrome.exe可执行文件),因此它部署为独立的服务数据包。

我还在ServiceManifest.xml文件中放置了这个 XML 配置行:

<DataPackage Name="Data" Version="1.0.0" />

到目前为止,它看起来不错,无头浏览器内容已正确复制到 SFCluster 数据包目录。

然后在我的无状态服务代码中,我尝试调用 Pupeeteer chromium 可执行文件,如下所示:

var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
   Headless = true,
   ExecutablePath = _chromiumPath // @$"{context.CodePackageActivationContext.GetDataPackageObject("Data").Path}\.local-chromium\Win64-706915\chrome-win\chrome.exe"
});

using (var page = (await browser.NewPageAsync()))
{
   Response renderResponse;
try
{
   renderResponse = await page.GoToAsync(webPage.AbsoluteUri, timeout);

   if (renderResponse.Status != System.Net.HttpStatusCode.OK)
   {
      return new RenderResult(RenderStatus.OtherFailure);
   }
     // other code
   }
catch (TimeoutException)
{
   return new RenderResult(RenderStatus.Timeouted);
}

在这一行中:using (var page = (await browser.NewPageAsync()))我的代码(线程)只是挂起而不返回,在调试控制台中我看到许多线程退出,但没有发生异常。我之前在修复有关适当复制 chromium 文件夹内容的其他一些错误时遇到 System.IO.FileNotFoundException,但现在这些错误已经消失,因此代码似乎找到了 .exe,但不知何故无法启动 PupeeterSharp 的无头模式。

这是否意味着我不能简单地使用 Service Fabric 的本机应用程序模型运行外部 .exe 铬二进制文件?我应该改用 Docker 和 Linux 容器吗?

4

0 回答 0