C#如何使用Playwright实现浏览器自动化操作

来源:中国站长站作者:辉辉头衔:草根站长
导读:本期聚焦于小伙伴创作的《C#如何使用Playwright实现浏览器自动化操作》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#如何使用Playwright实现浏览器自动化操作》有用,将其分享出去将是对创作者最好的鼓励。

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

C#如何使用Playwright实现浏览器自动化操作

环境准备与依赖安装

首先需要在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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。