首页 > 编程语言 >PuppeteerSharp库在C#中的应用案例

PuppeteerSharp库在C#中的应用案例

时间:2024-01-15 16:57:20浏览次数:24  
标签:案例 PuppeteerSharp await System C# proxy PDF using

引言

PuppeteerSharp是一个针对Google Chrome浏览器的高级API库,它允许我们使用C#来控制Chrome浏览器的,比如模拟用户行为操作、爬取网页内容等。本文将介绍如何使用PuppeteerSharp库在C#中实现下载千图网图片并保存为PDF文件的案例。

PuppeteerSharp技术

PuppeteerSharp 提供了一系列丰富的功能,包括但不限于:

  • 模拟用户操作:可以模拟用户在浏览器中的点击、输入等操作。
  • 爬取网页内容:可以获取网页的HTML、截图等信息。
  • 生成PDF文件:可以将网页内容保存为PDF文件。

项目需求

我们的项目需求是从千图网上爬取图片,把这些图片保存为PDF文件。为了实现这个目标,我们将使用PuppeteerSharp库来模拟浏览器行为,从网页中获取图片,把这些图片保存为PDF文件。

抓取思路分析

  1. 分析页面请求:使用Chrome开发者工具或类似工具分析千图网的页面请求,找到图片数据的来源。
  2. 找到数据来源:确定图片数据是通过接口获取还是直接嵌入在页面中。
  3. 分析接口规律:如果图片数据是通过接口获取的,分析接口的规律,包括请求方式、参数等。
  4. 获取接口数据:使用PuppeteerSharp库模拟请求接口,获取图片数据。
  5. 过滤处理数据:对获取的图像数据进行过滤和处理,提取出需要的图像信息。

完整的爬取过程:

// 使用 PuppeteerSharp 库进行爬取和保存为 PDF 的代码示例
using PuppeteerSharp;
using System;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var proxy = new ProxyOptions
        {
            Server = "www.16yun.cn",
            Port = 5445,
            Username = "16QMSOML",
            Password = "280651"
        };

        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
        using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true,
            Args = new[] { $"--proxy-server=http://{proxy.Server}:{proxy.Port}", $"--proxy-auth={proxy.Username}:{proxy.Password}" }
        });
        var page = await browser.NewPageAsync();
        await page.GoToAsync("https://www.example.com");

        // 获取图片数据并保存为PDF的代码逻辑
        // ...

        await browser.CloseAsync();
    }
}

 

以上是一个简单的使用PuppeteerSharp库的示例,其中包含了创建浏览器实例、打开页面等基本操作。在实际项目中,我们需要根据具体的需求和网站结构来编写更复杂的爬取和保存逻辑。

如何解析抓取来的内容

当解析来的内容时,我们可以使用C#中的Json.NET库或者内置的System.Text.Json库来处理JSON格式的数据。以下是一个简单的代码,演示了如何使用Json.NET库来解析JSON格式的数据:

using Newtonsoft.Json;
using System;

public class ImageData
{
    public string Url { get; set; }
    public string Description { get; set;
}

class Program
{
    static void Main()
    {
        string jsonData = @"{
            'url': 'https://example.com/image1.jpg',
            'description': 'Beautiful landscape'
        }";

        ImageData imageData = JsonConvert.DeserializeObject<ImageData>(jsonData);

        Console.WriteLine("Image URL: " + imageData.Url);
        Console.WriteLine("Description: " + imageData.Description);
    }
}

  

如何保存到PDF

PuppeteerSharp库提供了生成PDF的功能,我们可以使用它来将获取到的图片保存为PDF文件。首先,我们需要创建一个新的工具实例,然后打开一个浏览新的页面,将图片插入到页面中,并使用PuppeteerSharp提供的API来生成PDF文件。

using PuppeteerSharp;
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
        using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });
        var page = await browser.NewPageAsync();
        await page.GoToAsync("https://www.example.com");

        // 将图片插入到页面中
        // ...

        // 使用PuppeteerSharp提供的API生成PDF文件
        await page.PdfAsync("output.pdf");

        await browser.CloseAsync();
    }
}

  

 

标签:案例,PuppeteerSharp,await,System,C#,proxy,PDF,using
From: https://www.cnblogs.com/mmz77-aa/p/17965738

相关文章

  • Lift, Splat, Shoot_ Encoding Images From Arbitrary Camera Rigs by Implicitly Unp
    zotero-key:HP5VFNPQzt-attachments:-"413"title:"Lift,Splat,Shoot:EncodingImagesFromArbitraryCameraRigsbyImplicitlyUnprojectingto3D"citekey:philionLiftSplatShoot2020Lift,Splat,Shoot:EncodingImagesFromArbitr......
  • 差分符号熵Differential symbolic Entropy,多尺度差分符号熵,层次差分符号熵,时移多尺度
    差分符号熵DifferentialsymbolicEntropy,多尺度差分符号熵,层次差分符号熵,时移多尺度差分符号熵,复合多尺度差分符号熵,精细复合多尺度差分符号熵(Matlab代码获取链接:https://mbd.pub/o/bread/mbd-ZZmblZlv)熵或复杂性度量区分时间序列类别和理解潜在动态的能力是众所周知的。该算法......
  • opencv剪切图片
    debug模式下:包含include和lib<PropertyGroupCondition="'$(Configuration)|$(Platform)'=='Debug|x64'"><LinkIncremental>true</LinkIncremental><IncludePath>$(O2_3RD)\opencv\include;$(IncludePath)<......
  • SecureCRT & SecureFX 9.5 for macOS, Linux, Windows
    SecureCRT&SecureFX9.5formacOS,Linux,Windows-跨平台的多协议终端仿真和文件传输请访问原文链接:SecureCRT&SecureFX9.5formacOS,Linux,Windows,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgSecureCRT客户端运行于Windows、Mac和Linux,将坚如磐......
  • C语言学习随笔-07 auto关键字
    1、在C中auto是一个存储类的关键字。     -auto存储类:auto存储类是所有局部变量默认的存储类。     -auto可以在声明变量的时候根据变量的初始值的类型自动为此变量选择匹配的类型。2、注意事项     -auto声明的变量必须要初始化,否则编译器不能判断变量......
  • C#委托的2中调用方式
    第一种:直接调用,通过invoke方法;第二种:这是第二种将委托作为方法的参数的间接调用;下面举个栗子演示:usingSystem;usingSystem.Collections.Generic;namespaceTestDelegate{delegateintDeleInvoker(int[]vs);classProgram{staticvoidMain(str......
  • 【eBPF-04】进阶:BCC 框架中 BPF 映射的应用 v2.0——尾调用
    这两天有空,继续更新一篇有关eBPFBCC框架尾调用的内容。eBPF技术很新,能够参考的中文资料很少,而对于BCC框架而言,优秀的中文介绍和教程更是凤毛麟角。我尝试去网上检索有关尾调用的中文资料,BCC框架的几乎没有。即使找到了,这些资料也难以给出可供参考和正确运行的例子。BCC......
  • Acunetix v24.1 (Linux, Windows) - 漏洞扫描 (Web 应用程序安全测试)
    Acunetixv24.1(Linux,Windows)-漏洞扫描(Web应用程序安全测试)Acunetix|WebApplicationSecurityScanner请访问原文链接:https://sysin.org/blog/acunetix/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org重要提示AcunetixPremium现在使用日历化版本命......
  • 华为桌面系统迎来重要突破!PC版鸿蒙今年登场
    1月15日消息,据华为官方消息,HarmonyOSNEXT开发者预览版内测招募正式开始,首批招募机型包括华为Mate60、Mate60Pro、MateX5。据了解,HarmonyOSNEXT也就是所谓的“纯血鸿蒙”,系统底座全线自研,仅支持鸿蒙内核和鸿蒙系统的应用,彻底摒弃与安卓的兼容性。博主数码闲聊站表示,今年华......
  • SpringBoot中整合ElasticSearch实现增删改查等操作
    场景SpringBoot中整合ElasticSearch快速入门以及踩坑记录:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/135599698在上面进行集成的基础上,实现对ES数据的增删改查等操作。注:博客:https://blog.csdn.net/badao_liumang_qizhi实现1、ElastciSearch的对象映射h......