PuppeteerSharp:在.NET中驾驭浏览器的强大工具

在现代Web开发和自动化测试中, PuppeteerSharp 是一个强大的库,它允许我们在没有图形界面的情况下运行浏览器,从而实现网页自动化操作、数据抓取、截图和生成PDF等功能。

特性

  1. 1. 功能强大:PuppeteerSharp 提供了丰富的API,可以实现网页导航、元素选择、截图、生成PDF、模拟用户操作等功能。

  2. 2. 跨平台兼容:它支持.NET Core和.NET Framework,可以在Windows、Linux和macOS上运行。

  3. 3. 与.NET生态无缝集成:对于熟悉C#的我们来说,PuppeteerSharp 提供了直观的API,易于上手。

  4. 4. 社区支持:PuppeteerSharp 拥有一个活跃的开源社区,我们可以轻松找到支持和解决方案。

安装 PuppeteerSharp

Install-Package PuppeteerSharp

此外,还需要下载Chromium浏览器的二进制文件。PuppeteerSharp 提供了一个工具类 BrowserFetcher 来完成

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

PuppeteerSharp 的用法

初始化浏览器

var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
var page = await browser.NewPageAsync();
//在这里,`Headless = true` 表示浏览器以后台模式运行。如果你希望看到浏览器界面,可以将其设置为 `false`。

打开网页

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

截图

await page.ScreenshotAsync("example.png", new ScreenshotOptions { FullPage = true });

FullPage = true 表示截取整个页面,而不仅仅是当前视口。

生成PDF

await page.PdfAsync("example.pdf", new PdfOptions { Format = PaperFormat.A4 });
可以通过  PdfOptions  设置纸张大小、方向等参数。

模拟用户操作

点击按钮
await page.ClickAsync("#buttonId");
填写表单
await page.TypeAsync("#inputId", "输入的文本");
提交表单
await page.SubmitAsync("#formId");

提取页面数据

提取文本内容
var textContent = await page.EvaluateExpressionAsync<string>("document.querySelector('#elementId').textContent");
提取属性值
var attributeValue = await page.EvaluateExpressionAsync<string>("document.querySelector('#elementId').getAttribute('attributeName')");

关闭浏览器

完成操作后,记得关闭浏览器

await browser.CloseAsync();

高级用法

设置代理

需要使用代理服务器,可以在启动浏览器时配置

var proxy = new ProxyOptions
{
    Server = "proxy.xxx.com",
    Port = 8080,
    Username = "username",
    Password = "password"
};

var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
    Headless = true,
    Args = new[] { $"proxy-server=http://{proxy.Server}:{proxy.Port}" }
});

等待页面加载

对于动态加载的页面,可以使用 WaitForSelectorAsync 或 WaitForFunctionAsync 等方法:

await page.WaitForSelectorAsync("div.main-content");

实际案例:抓取LinkedIn页面

我们需要抓取某个用户的公开信息:

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

classProgram
{
    public static async Task Main()
    {
        // 下载浏览器组件
        awaitnew BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);

        // 启动浏览器
        var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = false });

        // 打开新页面
        var page = await browser.NewPageAsync();

        // 导航到LinkedIn页面
        await page.GoToAsync("https://www.linkedin.com/in/username");

        // 等待页面加载完成
        await page.WaitForSelectorAsync("div.profile");

        // 提取用户信息
        var name = await page.EvaluateExpressionAsync<string>("document.querySelector('.text-heading-xlarge').textContent");
        var headline = await page.EvaluateExpressionAsync<string>("document.querySelector('.text-body-medium').textContent");

        Console.WriteLine($"Name: {name}");
        Console.WriteLine($"Headline: {headline}");

        // 关闭浏览器
        await browser.CloseAsync();
    }
}

总结

PuppeteerSharp 是一个功能强大的工具,为我们提供了一个简单而强大的接口,用于控制浏览器。无论是自动化测试、数据抓取还是生成网页快照,PuppeteerSharp 都能够满足你的需求。

关注公众号“Net分享”,技术文章第一时间推送,随缘更新 , 分享一些你可能注意不到的细节。

  • 如果文章对您有帮助,请给我一个赞,谢谢

    点个小心是对我对大的支持!感谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值