admin管理员组

文章数量:1029586

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

代码语言:javascript代码运行次数:0运行复制
Install-Package PuppeteerSharp

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

代码语言:javascript代码运行次数:0运行复制
await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);

PuppeteerSharp 的用法

初始化浏览器

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

打开网页

代码语言:javascript代码运行次数:0运行复制
await page.GoToAsync("/");

截图

代码语言:javascript代码运行次数:0运行复制
await page.ScreenshotAsync("example.png", new ScreenshotOptions { FullPage = true });

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

生成PDF

代码语言:javascript代码运行次数:0运行复制
await page.PdfAsync("example.pdf", new PdfOptions { Format = PaperFormat.A4 });

可以通过 PdfOptions 设置纸张大小、方向等参数。

模拟用户操作

点击按钮
代码语言:javascript代码运行次数:0运行复制
await page.ClickAsync("#buttonId");
填写表单
代码语言:javascript代码运行次数:0运行复制
await page.TypeAsync("#inputId", "输入的文本");
提交表单
代码语言:javascript代码运行次数:0运行复制
await page.SubmitAsync("#formId");

提取页面数据

提取文本内容
代码语言:javascript代码运行次数:0运行复制
var textContent = await page.EvaluateExpressionAsync<string>("document.querySelector('#elementId').textContent");
提取属性值
代码语言:javascript代码运行次数:0运行复制
var attributeValue = await page.EvaluateExpressionAsync<string>("document.querySelector('#elementId').getAttribute('attributeName')");

关闭浏览器

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

代码语言:javascript代码运行次数:0运行复制
await browser.CloseAsync();

高级用法

设置代理

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

代码语言:javascript代码运行次数:0运行复制
var proxy = new ProxyOptions
{
    Server = "proxy.xxx",
    Port = 8080,
    Username = "username",
    Password = "password"
};

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

等待页面加载

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

代码语言:javascript代码运行次数:0运行复制
await page.WaitForSelectorAsync("div.main-content");

实际案例:抓取LinkedIn页面

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

代码语言:javascript代码运行次数:0运行复制
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(";);

        // 等待页面加载完成
        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 都能够满足你的需求。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-20,如有侵权请联系 cloudcommunity@tencent 删除浏览器数据自动化测试表单工具

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

代码语言:javascript代码运行次数:0运行复制
Install-Package PuppeteerSharp

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

代码语言:javascript代码运行次数:0运行复制
await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);

PuppeteerSharp 的用法

初始化浏览器

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

打开网页

代码语言:javascript代码运行次数:0运行复制
await page.GoToAsync("/");

截图

代码语言:javascript代码运行次数:0运行复制
await page.ScreenshotAsync("example.png", new ScreenshotOptions { FullPage = true });

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

生成PDF

代码语言:javascript代码运行次数:0运行复制
await page.PdfAsync("example.pdf", new PdfOptions { Format = PaperFormat.A4 });

可以通过 PdfOptions 设置纸张大小、方向等参数。

模拟用户操作

点击按钮
代码语言:javascript代码运行次数:0运行复制
await page.ClickAsync("#buttonId");
填写表单
代码语言:javascript代码运行次数:0运行复制
await page.TypeAsync("#inputId", "输入的文本");
提交表单
代码语言:javascript代码运行次数:0运行复制
await page.SubmitAsync("#formId");

提取页面数据

提取文本内容
代码语言:javascript代码运行次数:0运行复制
var textContent = await page.EvaluateExpressionAsync<string>("document.querySelector('#elementId').textContent");
提取属性值
代码语言:javascript代码运行次数:0运行复制
var attributeValue = await page.EvaluateExpressionAsync<string>("document.querySelector('#elementId').getAttribute('attributeName')");

关闭浏览器

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

代码语言:javascript代码运行次数:0运行复制
await browser.CloseAsync();

高级用法

设置代理

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

代码语言:javascript代码运行次数:0运行复制
var proxy = new ProxyOptions
{
    Server = "proxy.xxx",
    Port = 8080,
    Username = "username",
    Password = "password"
};

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

等待页面加载

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

代码语言:javascript代码运行次数:0运行复制
await page.WaitForSelectorAsync("div.main-content");

实际案例:抓取LinkedIn页面

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

代码语言:javascript代码运行次数:0运行复制
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(";);

        // 等待页面加载完成
        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 都能够满足你的需求。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-20,如有侵权请联系 cloudcommunity@tencent 删除浏览器数据自动化测试表单工具

本文标签: PuppeteerSharp在NET中驾驭浏览器的强大工具