在现代Web开发和自动化测试中, PuppeteerSharp 是一个强大的库,它允许我们在没有图形界面的情况下运行浏览器,从而实现网页自动化操作、数据抓取、截图和生成PDF等功能。
特性
1. 功能强大:PuppeteerSharp 提供了丰富的API,可以实现网页导航、元素选择、截图、生成PDF、模拟用户操作等功能。
2. 跨平台兼容:它支持.NET Core和.NET Framework,可以在Windows、Linux和macOS上运行。
3. 与.NET生态无缝集成:对于熟悉C#的我们来说,PuppeteerSharp 提供了直观的API,易于上手。
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分享”,技术文章第一时间推送,随缘更新 , 分享一些你可能注意不到的细节。
如果文章对您有帮助,请给我一个赞,谢谢
点个小心是对我对大的支持!感谢