public override IEnumerable <DataObject> ProcessInternal(ClientBase client, ResponseContainer container) { var doc = container.ResponseHtml.Value.DocumentNode; var leftContent = doc.SelectSingleNode(".//div[@class='left_content']"); var rightContent = doc.SelectSingleNode(".//div[@class='right_content']"); if (leftContent == null) { yield break; } AuctionStatus status = new AuctionStatus(); var auctionInfo = leftContent.SelectSingleNode("./p[@class='auction_info']"); var remaining = auctionInfo.SelectSingleNode("./span")?.InnerText ?? string.Empty; Match match = timeParser.Match(remaining); if (match.Success) { var time = int.Parse(match.Groups[1].Value); if (match.Groups[2].Value == "m") { status.MinutesRemaining = time; } else { status.NextIn = TimeSpan.FromSeconds(time); } } var bid = leftContent.SelectSingleNode("./div[contains(@class, 'currentSum')]"); status.CurrentBid = int.Parse(bid.InnerText, NumberStyles.AllowThousands | NumberStyles.Integer, client.ServerCulture); var count = leftContent.SelectSingleNode("./div[contains(@class, 'numberOfBids')]"); status.BidCount = int.Parse(count.InnerText, NumberStyles.Integer); var bidder = leftContent.SelectSingleNode("./a[contains(@class, 'currentPlayer')]"); status.HighestBidderName = bidder.InnerText.Trim(); status.HighestBidderId = int.Parse(bidder.Attributes["data-player-id"]?.Value ?? "0"); var item = leftContent.SelectSingleNode(".//a[contains(@class, 'detail_button')]"); string reference = item.Attributes["ref"].Value; IEnumerable <ShopItem> all = ShopItem.All(); status.Item = all.Where(si => si.Reference == reference).FirstOrDefault(); var ownBid = rightContent.SelectSingleNode(".//td[contains(@class, 'js_alreadyBidden')]"); status.OwnBid = int.Parse(ownBid.InnerText, NumberStyles.AllowThousands | NumberStyles.Integer, client.ServerCulture); var minBid = rightContent.SelectSingleNode(".//td[contains(@class, 'js_price')]"); status.MinimumBid = int.Parse(minBid.InnerText, NumberStyles.AllowThousands | NumberStyles.Integer, client.ServerCulture); HtmlNodeCollection scriptBlocks = doc.SelectNodes("//script[@type='text/javascript' and not(@src)]"); if (scriptBlocks != null) { foreach (HtmlNode block in scriptBlocks) { Match tokenMatch = TokenRegex.Match(block.InnerText); if (tokenMatch.Success) { status.Token = tokenMatch.Groups[1].Value; break; } } } yield return(status); }