PuppeteerSharp入坑记

Posted cdyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PuppeteerSharp入坑记相关的知识,希望对你有一定的参考价值。

PuppeteerSharp介绍可以看这篇文章:PuppeteerSharp: 更友好的 Headless Chrome C# API

PuppeteerSharp的github地址:https://github.com/hardkoded/puppeteer-sharp

我这边主要是记录一下安装使用时遇到的一些问题

开发环境

win7 64位

vs2017

netcore2.2

nuget安装PuppeteerSharp:Install-Package PuppeteerSharp -Version 2.0.3

 

做什么

以下是demo代码,一个简单的把网页转为pdf文件代码

技术图片
using System;
using System.Threading.Tasks;
using PuppeteerSharp;
namespace PuppeteerSharpDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var d = Task.Run(async () =>
             {
                 await Executed();
             });
            d.Wait();


            Console.WriteLine("ok");
            Console.ReadKey();

        }
        
        async static Task Executed()
        {
            var outputFile = Environment.CurrentDirectory + "\\test\\123.pdf";
            //问题就在这里
            var result = await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);

            var browser = await Puppeteer.LaunchAsync(new LaunchOptions
            {
                Headless = true
            });

            var page = await browser.NewPageAsync();
            await page.GoToAsync("http://baidu.com/");
            await page.PdfAsync(outputFile);
        }
    }
}
View Code

 

掉坑

当执行到以下这行代码时,会从网络上下载浏览器便捷式安装包download-Win64-706915.zip到你本地,但是代码执行到这里就抛出异常了,引发的异常:“System.Net.WebException”

var result = await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);

 然后在程序的当前文件夹中有一个.local-chromium目录,里面有个空的download-Win64-706915.zip

 

爬坑

0.折腾多次无果后,github查看它的源代码,在BrowserFetcher这个类里面有一个DownloadAsync方法,可以查看到完整的下载逻辑代码,具体去看看源码

1.请求https://storage.googleapis.com这个地方去下载,国内估计被墙了

2.下载完成解压出来

技术图片

 

填坑

知道问题在哪里,那么下面就是怎么解决了

0.自己去下载chromium包,自己解压,根据local-chromium目录的空download-Win64-706915.zip可以知道,我们要下载的win 64位的706915版本的chromium包

1.chromium包(根据自己的情况去找),下载地址:https://mirrors.huaweicloud.com/chromium-browser-snapshots/

2.解压下载好的zip压缩包,注意需要在local-chromium目录下,自己先创建一个Win64-706915目录

 技术图片

 

后记

 到此就完成了,可以正常运行了,我是这样自己解决这个问题。当然BrowserFetcher这个类中有两个构造函数,您可以使用带参数的构造函数,自己传入DownloadHost,这个需要您自己研究如何做。

 最后希望可以给到正在爬此坑的猿们一些思路。

以上是关于PuppeteerSharp入坑记的主要内容,如果未能解决你的问题,请参考以下文章

gRPC入坑记

conda命令入坑记

gRPC入坑记

Spring Cloud Gateway入坑记

ionic入坑记记录

[乐意黎原创] Centos下载安装PHP7.4.10(7.4.11)时开启ZIP模块的入坑与填坑记