public IList<AchievedAchievement> Parse(HtmlNode achievementNode, Character character) { List<Achievement> achievements = new List<Achievement>(); List<AchievedAchievement> actualAchievements = new List<AchievedAchievement>(); if (achievementNode == null) { throw new ArgumentNullException("achievementNode"); } string achievementId = achievementNode.Attributes["data-id"].Value; int blizzardId = 0; int.TryParse(achievementId, out blizzardId); Achievement achievement = _service.Find(blizzardId); if (achievement == null) { Console.WriteLine("Found unknown achievement {0}", achievementId); } if (!achievementNode.Attributes["class"].Value.Contains("locked")) { // DateTime whenAchieved = GetValueAsDateTime(achievementNode, "./div[@class='points-big border-8']/span[@class='date']"); if (!character.HasAchieved(achievement)) { character.AddNewAchivement(whenAchieved, achievement); } // check to see if achievement is part of a series if (achievement != null && achievement.Series != null) { // get all achievements under the one we have displayed foreach (Achievement seriesAchievement in _service.GetAllInSeries(achievement.Series).Where(a => a.SeriesOrder < achievement.SeriesOrder)) { if (!character.HasAchieved(achievement)) { character.AddNewAchivement(whenAchieved.AddDays(-1), seriesAchievement); } } } } return actualAchievements; }