2

PuppeteerSharp 的要求如下;我不知道如何在 Windows 7 上使用 PuppeteerSharp,有人可以给我看代码吗?

支持 WebSocket 库的最低 Windows 版本是 Windows 8 和 Windows Server 2012。阅读更多。如果您需要在 Windows 7 上运行 Puppeteer-Sharp,您可以通过 LaunchOptions.WebSocketFactory 属性使用 System.Net.WebSockets.Client.Managed。,怎么做?

4

2 回答 2

4

对于那些想要更准确答案的人来说,我的代码适用于 Windows 7。

private async void SaveToFile(string url)
{
    try
    {
        WebSocketFactory webSocketFactory = CreateWebSocket;
        LaunchOptions launchOptions = new LaunchOptions()
        {
            Headless = true,
            WebSocketFactory = webSocketFactory
        };
        var browser = await Puppeteer.LaunchAsync(launchOptions, product: Product.Chrome);
        var page = await browser.NewPageAsync();
        await page.GoToAsync(url);
        await page.PdfAsync("MyPdf.pdf", new PdfOptions() { Format = PuppeteerSharp.Media.PaperFormat.A4 });
        Task.WaitAll(new Task[2] {
            page.DisposeAsync().AsTask(),
            browser.DisposeAsync().AsTask() });
            }
         }
     }
     catch (Exception objException)
     {
         CommonMsgBox.Warning(objException.Message, "Error");
     }
}
private static async Task<System.Net.WebSockets.WebSocket> CreateWebSocket(Uri url, IConnectionOptions options, CancellationToken cancellationToken)
{
    var result = new System.Net.WebSockets.Managed.ClientWebSocket();
    result.Options.KeepAliveInterval = TimeSpan.Zero;
    await result.ConnectAsync(url, cancellationToken).ConfigureAwait(false);
    return result;
}

System.Net.WebSockets.Managed可以从 NuGet 下载所有依赖项。

编辑:Puppeteer 有时会有奇怪的行为,最好不要用它包裹它的组件,using否则它会在某些情况下挂起。我已经从上面的代码中删除了这个包装。

于 2020-10-07T11:56:07.477 回答
3

添加对“System.Net.WebSockets.Managed.ClientWebSocket”的引用</p>

  private async Task<WebSocket> CreateWebSocket(Uri url, IConnectionOptions options, CancellationToken cancellationToken)
    {
        var result= new ClientWebSocket();
        result.Options.KeepAliveInterval = TimeSpan.Zero;
        await result.ConnectAsync(url, cancellationToken).ConfigureAwait(false);
        return result;
    }
于 2020-01-14T09:06:31.670 回答