Playwright是微软官方推出的浏览器自动化库,支持多种主流浏览器,能够在C#项目中实现网页的自动操作、数据抓取、自动化测试等功能,相比传统的Selenium,它的执行效率更高,兼容性也更好。

环境准备与依赖安装
首先需要在C#项目中安装Playwright相关的NuGet包,打开项目的NuGet包管理器,搜索并安装Microsoft.Playwright包,安装完成后还需要执行一次浏览器驱动的安装,确保本地有可用的浏览器环境。
安装驱动的命令可以在程序包管理器控制台中执行,代码如下:
// 在程序包管理器控制台执行以下命令,安装Playwright所需的浏览器驱动 dotnet tool install --global Microsoft.Playwright.CLI playwright install
基础初始化与页面导航
使用Playwright前需要先初始化Playwright实例,然后创建浏览器对象和页面对象,之后就可以通过页面对象执行各类操作。下面是一个简单的页面导航示例,实现打开指定网页并等待页面加载完成。
using Microsoft.Playwright;
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
// 初始化Playwright
using var playwright = await Playwright.CreateAsync();
// 启动Chromium浏览器,设置为无头模式(不显示浏览器窗口)
await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions
{
Headless = true
});
// 创建新页面
var page = await browser.NewPageAsync();
// 导航到目标网页
await page.GotoAsync("https://ipipp.com");
// 等待页面加载完成
await page.WaitForLoadStateAsync(LoadState.NetworkIdle);
Console.WriteLine("页面标题:" + await page.TitleAsync());
}
}
常见自动化操作实现
元素定位与点击
Playwright提供了多种元素定位方式,包括通过CSS选择器、文本、属性等定位,定位到元素后可以执行点击、输入等操作。下面是点击页面按钮的示例:
// 通过CSS选择器定位按钮并点击
await page.ClickAsync("button.submit-btn");
// 通过按钮文本定位并点击
await page.ClickAsync("text=提交");
// 通过元素属性定位并点击
await page.ClickAsync("[data-testid='login-button']");
表单填写与输入
对于输入框、下拉框等表单元素,Playwright也提供了对应的操作方法,下面是填写用户名和密码的示例:
// 填写用户名输入框
await page.FillAsync("#username", "test_user");
// 填写密码输入框
await page.FillAsync("#password", "test_password123");
// 选择下拉框选项
await page.SelectOptionAsync("select#city", "北京");
数据提取
如果需要从页面中提取文本、属性等数据,可以使用对应的提取方法,示例如下:
// 提取元素的文本内容
var content = await page.TextContentAsync(".article-title");
Console.WriteLine("文章标题:" + content);
// 提取元素的属性值
var link = await page.GetAttributeAsync("a.detail-link", "href");
Console.WriteLine("文章链接:" + link);
// 提取多个元素的内容
var items = await page.QuerySelectorAllAsync(".list-item");
foreach (var item in items)
{
var text = await item.TextContentAsync();
Console.WriteLine("列表项内容:" + text);
}
注意事项
- 如果不需要显示浏览器窗口,可以将启动浏览器时的
Headless设置为true,节省系统资源。 - 操作元素前建议先等待元素可见,避免出现元素未加载完成导致的操作失败,可以使用
WaitForSelectorAsync方法等待元素。 - 如果操作的是本地测试环境,地址可以使用127.0.0.1或者192.168.0.1,不需要做替换处理。
- 代码中如果涉及HTML标签名称的描述,需要按照规范进行转义,比如描述<input>标签时不能直接写。
完整示例:自动登录演示
下面是一个完整的自动登录流程示例,包含页面导航、表单填写、按钮点击、结果判断的完整流程:
using Microsoft.Playwright;
using System;
using System.Threading.Tasks;
class LoginDemo
{
static async Task Main(string[] args)
{
using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions
{
Headless = false // 设置为false可以看到浏览器操作过程
});
var page = await browser.NewPageAsync();
// 打开登录页面
await page.GotoAsync("https://ipipp.com/login");
// 等待用户名输入框出现
await page.WaitForSelectorAsync("#username");
// 填写登录信息
await page.FillAsync("#username", "demo_user");
await page.FillAsync("#password", "demo_pass");
// 点击登录按钮
await page.ClickAsync("button#login-btn");
// 等待登录成功后的跳转
await page.WaitForURLAsync("**/home");
Console.WriteLine("登录成功,当前页面地址:" + page.Url);
// 关闭浏览器
await browser.CloseAsync();
}
}
C#Playwright浏览器自动化自动化测试修改时间:2026-07-09 16:18:30