private static DefaultGatewayList parseList(HtmlDocument parser, string fieldName)
        {
            var select = parser.DocumentNode.SelectSingleNode($"//select[@name='{fieldName}']");

            if (select == null)
            {
                throw new InvalidOperationException($"Unable to parse html, cannot find select element named {fieldName}, this is a bug");
            }

            var list = new DefaultGatewayList();

            foreach (var opt in select.ChildNodes)
            {
                if (opt.Name == "option")
                {
                    var item = new DefaultGatewayListItem()
                    {
                        InternalName = opt.Attributes["value"].Value, Name = opt.InnerText
                    };
                    list.items.Add(item);
                    if (opt.Attributes["selected"] != null)
                    {
                        list.Selected = item;
                    }
                }
            }
            return(list);
        }
        private void parsePageContent(string htmlBody)
        {
            var parser = new HtmlDocument();

            parser.LoadHtml(htmlBody);

            gateways = parseGatewaysTable(parser);

            DefaultGatewayIPv4 = parseList(parser, "defaultgw4");
            DefaultGatewayIPv6 = parseList(parser, "defaultgw6");

            formSaveDefaultGatewaysCsrfToken = extractDefaultGatewayFormCsrfToken(parser);

            // "changes must be applied" banner that shows if Gateways have been saved
            formApplyChangesCsrfToken = extractApplyChangesFormCsrfToken(parser);
        }