You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Playwright(C#)中设置默认下载路径

如何在Playwright(C#)中设置默认下载路径

我太懂这种迁移时卡小细节的感觉了——你刚把大部分Selenium的逻辑转到Playwright,结果在默认下载路径这儿卡壳了对吧?先确认下,你之前在Selenium/C#里是这么实现的对吧?

protected static string DownloadPath { get; set; } = "C:\\agent_work\\1\\s";   
options.AddUserProfilePreference("download.default_directory", DownloadPath);
var service = ChromeDriverService.CreateDefaultService();
Driver = new ChromeDriver(service, options, TimeSpan.FromSeconds(MaxWait));

那在Playwright的C#版本里,设置下载路径其实更统一省心,给你两种常用的实现方式:

方式一:全局默认下载路径(整个浏览器上下文生效)

如果想让这个浏览器实例里的所有下载都自动存到指定路径,只需要在创建浏览器上下文的时候配置DownloadsPath参数就行,Chromium、Firefox、WebKit都通用:

using Microsoft.Playwright;

// 初始化Playwright实例
using var playwright = await Playwright.CreateAsync();
// 启动浏览器(这里以Chrome为例,按需换Firefox/WebKit)
await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions
{
    Headless = false, // 按需设置是否启用无头模式
});

// 定义下载路径
var targetDownloadPath = "C:\\agent_work\\1\\s";
// 创建带默认下载路径的浏览器上下文
await using var context = await browser.NewContextAsync(new BrowserNewContextOptions
{
    DownloadsPath = targetDownloadPath
});

// 后续打开的页面,所有下载都会默认存到这个路径里
var page = await context.NewPageAsync();
// 举个例子:触发页面上的下载操作
await page.GotoAsync("https://example.com/your-download-page");
await page.ClickAsync("#download-trigger-button");

方式二:针对单个下载操作指定路径

如果只是想给某一次特定的下载单独设置保存路径,可以监听页面的Download事件,在事件里手动指定保存位置:

using Microsoft.Playwright;

using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.LaunchAsync();
await using var context = await browser.NewContextAsync();
var page = await context.NewPageAsync();

// 监听下载事件,自定义保存路径
page.Download += async (sender, e) =>
{
    var currentDownload = e.Download;
    // 拼接自定义路径+下载文件的建议文件名
    var customSavePath = $"C:\\agent_work\\1\\s\\{currentDownload.SuggestedFilename}";
    // 保存文件到指定路径
    await currentDownload.SaveAsAsync(customSavePath);
};

// 触发下载操作
await page.GotoAsync("https://example.com/your-download-page");
await page.ClickAsync("#download-trigger-button");

需要注意的是,Playwright会自动处理下载路径的权限问题,不用像Selenium那样还要手动配置用户偏好,是不是方便很多?

内容来源于stack exchange

火山引擎 最新活动