public static Form LocateAround(HtmlNode cornerstone) { foreach (var inspect in cornerstone.AncestorsAndSelf()) { var form = inspect.PreviousSiblingsAndSelf().FirstOrDefault( n => n.NodeType == HtmlNodeType.Element && n.Name == "form"); if (form == null) continue; var endForm = inspect.NextSiblingsAndSelf().FirstOrDefault( n => n.NodeType == HtmlNodeType.Text && n.InnerText == "</form>"); if (endForm == null) continue; return new Form { Start = form, End = endForm, Children = form.NextSibling.NextSiblingsAndSelf().TakeWhile(n => n != endForm).ToArray() }; } return null; }