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

AngleSharp从v0.9.9.0升级到v0.9.9.2后出现DateTime格式识别异常

解决AngleSharp v0.9.9.2升级后的DateTime解析异常问题

你遇到的问题核心是AngleSharp在v0.9.9.2版本中对Cookie日期的解析逻辑变得更严格了——目标网站返回的Cookie包含不符合标准格式的日期字符串,触发了String was not recognized as a valid DateTime异常,最终被包装成AggregateException抛出。

问题根源

v0.9.9.0版本的AngleSharp对Cookie日期解析的容错性较高,即便日期格式不标准也能兼容处理;但v0.9.9.2修复了相关解析逻辑,开始严格遵循RFC规范解析Cookie日期,当目标网站返回的Set-Cookie头里的日期格式不符合规范时,就会触发解析失败。

解决方案

你可以通过自定义Cookie管理器来处理无效的日期解析,或者直接跳过有问题的Cookie。下面是两种可行的实现方式:

方案1:自定义Cookie管理器(推荐)

通过自定义ICookieManager实现,捕获日期解析异常并跳过无效Cookie,既保留Cookie功能,又避免异常:

var siteUrl = "https://richmond.csod.com/ats/careersite/search.aspx?site=1&c=richmond";

// 使用自定义Cookie管理器
var customCookieManager = new TolerantCookieManager();
var configuration = Configuration.Default
    .WithDefaultLoader()
    .WithCookieManager(customCookieManager);

var currentContext = BrowsingContext.New(configuration);
var originalDoc = currentContext.OpenAsync(siteUrl).Result;
Console.WriteLine(originalDoc.DocumentElement.OuterHtml);

// 自定义容错Cookie管理器
public class TolerantCookieManager : ICookieManager
{
    private readonly List<Cookie> _cookies = new();

    public void SetCookie(Url url, Cookie cookie)
    {
        try
        {
            // 尝试解析日期,失败则忽略过期时间设置
            if (!string.IsNullOrWhiteSpace(cookie.Expires))
            {
                if (DateTime.TryParse(cookie.Expires, out var validExpires))
                {
                    cookie.Expires = validExpires.ToString("R");
                }
                else
                {
                    // 如果解析失败,清空过期时间,让Cookie成为会话Cookie
                    cookie.Expires = string.Empty;
                }
            }
            _cookies.Add(cookie);
        }
        catch (FormatException ex)
        {
            Console.WriteLine($"忽略格式无效的Cookie [{cookie.Name}]: {ex.Message}");
        }
    }

    public IEnumerable<Cookie> GetCookies(Url url)
    {
        return _cookies.Where(c => c.Matches(url));
    }

    public void DeleteCookie(Cookie cookie) => _cookies.Remove(cookie);
    public void DeleteCookies(Url url) => _cookies.RemoveAll(c => c.Matches(url));
}

方案2:禁用Cookie支持(简化版)

如果你的场景不需要依赖Cookie,可以直接去掉Cookie支持,绕过日期解析问题:

var siteUrl = "https://richmond.csod.com/ats/careersite/search.aspx?site=1&amp;c=richmond";
// 移除.WithCookies(),禁用Cookie处理
var configuration = Configuration.Default.WithDefaultLoader();
var currentContext = BrowsingContext.New(configuration);
var originalDoc = currentContext.OpenAsync(siteUrl).Result;
Console.WriteLine(originalDoc.DocumentElement.OuterHtml);

注意:这种方法可能影响网站的正常访问(比如需要Cookie维持会话的场景),仅适合无Cookie依赖的爬取需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:13:38