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); } } }
掉坑
当执行到以下这行代码时,会从网络上下载浏览器便捷式安装包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入坑记的主要内容,如果未能解决你的问题,请参考以下文章