You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium C#脚本时hello.myfonts.net加载超时问题求助

我之前碰到过好几个类似的场景,都是WebDriver的浏览器沙盒/默认配置和手动浏览环境差异导致的,给你整理几个靠谱的解决办法:

解决方案

1. 直接拦截目标域名的请求(最推荐)

这个myfonts的链接看起来是个统计/计数类请求,完全不影响页面核心功能,直接拦截它就能彻底解决卡加载的问题。

Chrome驱动实现

用Chrome的DevTools协议来拦截特定域名的请求,C#代码示例:

var options = new ChromeOptions();
var driver = new ChromeDriver(options);
var devTools = driver.CreateDevToolsSession();
await devTools.Network.Enable(new EnableCommandSettings());
// 拦截hello.myfonts.net下的所有请求
await devTools.Network.SetBlockedUrls(new SetBlockedUrlsCommandSettings
{
    Urls = new List<string> { "*://hello.myfonts.net/*" }
});

// 正常导航到被测页面
driver.Navigate().GoToUrl("你的被测页面URL");

Firefox驱动实现

可以通过设置Firefox偏好来实现拦截,简单直接:

var options = new FirefoxOptions();
// 开启请求拦截,并将目标域名加入黑名单
options.SetPreference("network.http.blocking.enabled", true);
options.SetPreference("network.http.blocking.blacklist", "hello.myfonts.net");

var driver = new FirefoxDriver(options);
driver.Navigate().GoToUrl("你的被测页面URL");

2. 调整页面加载策略

默认的页面加载策略是normal,会等待所有资源加载完成才继续执行脚本。改成eager或none,让脚本在DOM结构加载完成后就继续,不用等这个卡住的资源。

C#代码示例(Chrome/Firefox通用逻辑):

var options = new ChromeOptions();
// Eager:等待DOM加载完成就继续;None:完全不等待页面加载,需手动控制等待逻辑
options.PageLoadStrategy = PageLoadStrategy.Eager;

var driver = new ChromeDriver(options);
driver.Navigate().GoToUrl("你的被测页面URL");
// 之后手动等待核心业务元素加载完成即可
new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(d => d.FindElement(By.Id("核心元素ID")).Displayed);

3. 让WebDriver复用浏览器缓存

手动浏览时浏览器有缓存加持,而WebDriver默认每次启动都是干净的临时环境。可以配置让它使用持久化的用户数据目录,重复请求就会走缓存,避免卡加载。

Chrome示例:

var options = new ChromeOptions();
// 指定一个本地目录作为用户数据目录(提前创建好)
options.AddArgument(@"user-data-dir=C:\SeleniumChromeProfile");

var driver = new ChromeDriver(options);
driver.Navigate().GoToUrl("你的被测页面URL");

4. 注入JS提前阻止请求

在页面开始加载前,注入JavaScript来阻止目标链接的加载:

var driver = new ChromeDriver();
// 先注入拦截脚本
driver.ExecuteScript(@"
    window.addEventListener('beforeload', function(e) {
        var url = e.target.src || e.target.href;
        if (url && url.includes('hello.myfonts.net')) {
            e.preventDefault();
            e.stopPropagation();
        }
    }, true);
");
// 再导航到被测页面
driver.Navigate().GoToUrl("你的被测页面URL");

补充说明

手动浏览正常的核心原因是:日常浏览器有缓存、可能装了广告拦截插件,或者网络节点已经缓存了这个资源;而WebDriver启动的是“纯净”的浏览器实例,没有这些配置,所以会卡在这个非核心请求上。

内容的提问来源于stack exchange,提问作者faisalk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:57:09