PuppeteerSharp无头浏览器.Net Sdk(Puppeteer)

原创
2019/12/18 15:40
阅读数 3K

Puppeteer

首先我们需要了解下Puppeteer是谷歌官方出品的一个通过DevTools协议控制headless Chrome的NodeJS库。

什么是无头浏览器?通俗点讲就是没有界面的浏览器。通过浏览器提供的API,进行调用,可以实现丰富的功能。网上有使用Puppeteer进行爬虫开发的案例。

通过无头浏览器提供的这项功能,我们可以很方便的在服务端进行开发,完成一些复杂的网页交互。

Puppeteer支持导出图片(JPG、PNG)、PDF等。

今天这里注重讲下基于Puppeteer用C#语言实现的PuppeteerSharp SDK。

PuppeteerSharp

PuppeteerSharp基于NetStandard 2.0库,最低平台版本要求是.NET Framework 4.6.1和.NET Core 2.0。

接下里,我们做一个示例程序,这里我新建一个.netcore2.0控制台应用程序,然后通过nuget添加对PuppeteerSharp的引用。

然后写一段示例程序,这里我们以“OSC”首页为例,导出PDF。

 static void Main(string[] args)
        {
            Test().Wait();
            Console.WriteLine("Hello World!");
        }

        static async Task Test()
        {
            try
            {
                //  await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
                using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions()
                {
                    Headless = true //偵測時可設定false觀察網頁顯示結果(註:非Headless時不能匯出PDF)
                }))
                {
                    using (var page = await browser.NewPageAsync())
                    {
                        await page.GoToAsync("https://www.oschina.net/");
                        //透過SetViewport控制視窗大小決定抓圖尺寸
                        await page.SetViewportAsync(new ViewPortOptions
                        {
                            Width = 960,
                            Height = 1000,
                            IsMobile = false,
                            IsLandscape = false,
                        });



                        await page.WaitForTimeoutAsync(1500);
                        await page.PdfAsync($"D:\\FreewayTraffic\\Snapshot.pdf", new PdfOptions()
                        {
                            PrintBackground = true,
                            MarginOptions = new PuppeteerSharp.Media.MarginOptions()
                            {
                                Left = "20px",
                                Right = "20px",
                                Bottom = "20px",
                                Top = "20px",
                            },
                            Format = PuppeteerSharp.Media.PaperFormat.A4,
                        });

                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                throw;
            }
        }

首先需要注意的是:

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

这段代码,首次启动程序时,它会检测当前执行程序.local-chromium目录下是否有对应版本的chrome.exe,没有的话,首次会启动下载,文件大小问60MB左右。

下载完成后的目录文件如下图:

这样我们就可以启动刚开始的程序了,看看效果吧!

上面就是导出的PDF和图片。

PDF导出的效果如上。

至此,关于PuppeteerSharp的使用算是完成了。

PuppeteerSharp 系列文章:

展开阅读全文
加载中

作者的其它热门文章

打赏
1
1 收藏
分享
打赏
1 评论
1 收藏
1
分享
返回顶部
顶部