nodejs抓取动态网页(Web浏览器呈现的HTML,您可以开始网页并JavaScript吗?)

优采云 发布时间: 2021-10-21 07:03

  nodejs抓取动态网页(Web浏览器呈现的HTML,您可以开始网页并JavaScript吗?)

  Puppeteer 是一个流行的 Headless Chrome NodeJS API 爬虫库,由 Google 构建。 Puppeteer Sharp 是用 C# 编写的,由 Dario Kondratiuque 于 2017 年发布,为 .NET 开发人员提供相同的功能。

  

  傀儡师标志

  Puppeteer Sharp 使 .NET 开发人员能够以编程方式控制开源 Google Chrome。 Puppeteer API 的便利之处在于能够使用浏览器的 headless 特性而无需显示浏览器来提高性能。

  为什么要使用 Puppeteer Sharp?

  如果您是 .NET 开发人员,可以通过 Nuget 包将其安装到项目中:

  在现代 Web 中,Web 应用程序通常依赖 JavaScript 来加载 UI。如果您使用爬虫加载 Bing 地图,您可能会失望地收到:

  

  Bing 地图为空

  Puppeteer Sharp 除了检索 JavaScript 渲染的 HTML 之外,还可以注入 HTML 进行导航网站;与 UI 元素交互;截取屏幕截图或创建 PDF,现在流行的 Google NodeJS API 中收录更*敏*感*词*。

  入门

  在新的或现有的 .NET 项目中使用 Puppeteer Sharp。安装最新版本的 Nuget 包“PuppeteeSharp”。

  

  图像.png

  首先我们需要将Chrome浏览器下载到本地。这是 Puppeteer Sharp 将用于与 网站 交互的浏览器。

  幸运的是,我们可以使用 C# 下载默认修订版或开发者指定的修订版。仅当本地计算机上不存在修订版时才会下载。

  // Download the Chromium revision if it does not already exist

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

  如果下载成功,您会在项目目录中看到在操作系统上运行所需的浏览器版本:

  

  图像.png

  加载网页

  现在您已将浏览器下载到本地计算机,您可以开始加载网页并检索 JavaScript 呈现的 HTML。

  首先,我们将启动一个无头 Web 浏览器的实例,加载一个新选项卡并转到“地图”:

  // Create an instance of the browser and configure launch options

Browser browser = await Puppeteer.LaunchAsync(new LaunchOptions

{

Headless = true

});

// Create a new page and go to Bing Maps

Page page = await browser.NewPageAsync();

await page.GoToAsync("https://www.bing.com/maps");

  

  图像.png

  在无头浏览器中成功加载网页后,让我们通过搜索当地旅游景点与网页进行交互:

  // Search for a local tourist attraction on Bing Maps

await page.WaitForSelectorAsync(".searchbox input");

await page.FocusAsync(".searchbox input");

await page.Keyboard.TypeAsync("CN Tower, Toronto, Ontario, Canada");

await page.ClickAsync(".searchIcon");

await page.WaitForNavigationAsync();

  我们可以使用Puppeteer Sharp与JavaScript渲染的Bing地图HTML进行交互,搜索“加拿大安大略省多伦多CN塔”!

  如果您想存储 HTML 以分析地址或描述等信息,您可以轻松地将 HTML 存储在变量中:

  // Store the HTML of the current page

string content = await page.GetContentAsync();

  完成后关闭浏览器释放资源:

  // Close the browser

await browser.CloseAsync();

  屏幕截图和 PDF 文档

  Puppeteer Sharp 的好处之一是能够生成当前页面的屏幕截图和 PDF 文档。这对于调试、自动化测试或以特定分辨率捕获网页特别有用。

  如果你想截取当前页面的截图:

  await page.ScreenshotAsync("C:\\Files\\screenshot.png");

  

  人偶截图

  或者,生成当前页面的PDF文档:

  await page.PdfAsync("C:\\Files\\document.pdf");

  

  图像.png

  更改页面大小

  如果您需要测试特定显示尺寸的网页(例如,查看页面在手机上的显示方式),您可以使用 Puppeter Sharp 更改当前页面上的网页尺寸:

  // Change the size of the view port to simulate the iPhone X

await page.SetViewportAsync(new ViewPortOptions

{

Width = 1125,

Height = 2436

});

  

  图像.png

  跟踪日志

  除了上述功能外,Puppeteer Sharp 还可用于监控和检测与网络用户界面相关的问题。 .NET 开发人员可以使用 Puppeteer Sharp 检查任何网络性能问题。

  为此,我们可以启动和停止跟踪日志:

  await page.Tracing.StartAsync(new TracingOptions { Path = "C:\\Files\\trace.json" });

...

await page.Tracing.StopAsync();

  

  图像.png

  如果跟踪日志没有捕获调试会话所需的详细信息,您可以启用 Chrome DevTools 进行进一步分析:

  Browser browser = await Puppeteer.LaunchAsync(new LaunchOptions

{

Devtools = true

});

  如果在 Puppeteer Sharp 中启用 Chrome DevTools,headless 配置将自动禁用,您将可以查看浏览器,并且 DevTools 将显示查看 Web 应用程序的 JavaScript 渲染代码的选项,以及诸如查看网络活动。

  

  图像.png

  连接到远程浏览器

  Puppeteer Sharp 的最后一个功能是能够连接到远程浏览器。如果您的服务器上无法安装浏览器(例如 Linux),此功能可能会很有用。

  比如老外的这个browserless.io:可以用不花钱的童鞋

  

  图像.png

  var connectOptions = new ConnectOptions()

{

BrowserWSEndpoint = "$wss://chrome.browserless.io/"

};

using (var browser = await Puppeteer.ConnectAsync(connectOptions))

{

...

}

  项目捐赠

  项目官网。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线