有时(因为网络抽风,或者 IP 黑了)一些外部 CSS、字体加载得很慢,导致程序超时,不如直接在浏览器客户端屏蔽掉
可以通过 Playwright 的 Route 类实现,.NET 的调用方式与 python、JS SDK 大同小异,可以作用于任何通过 Page.RouteAsync(url, handler, options) 和 BrowserContext.RouteAsync(url, handler, options) 建立的路由
Page 和 BrowserContext 都可以用
环境
- .NET 6
- Playwright 1.18.0
参考
代码
//... var playwright = await Playwright.CreateAsync(); await using var browser = await playwright.Webkit.LaunchAsync(new() { Headless = config.EnableHeadless }); var page = await browser.NewPageAsync(); await page.RouteAsync("**/*", async route => { var blockList = new List<string> { "stylesheet", "image", "font" }; // 禁止加载的资源类型 if (blockList.Contains(route.Request.ResourceType)) await route.AbortAsync(); else await route.ContinueAsync(); // 其他资源继续加载 }); await page.GotoAsync(url); //...
支持的资源类型
- stylesheet - image - media - font - script - texttrack - xhr - fetch - eventsource - websocket - manifest - other
Route 类有 Route.AbortAsync(errorCode)、Route.ContinueAsync(options) 和 Route.FulfillAsync(options) 三个方法,见文档