Внесите переменную в значение тэга ввода html, используя Html Agility Pack C #

c# html html-agility-pack saml

Вопрос

Возможно ли использовать Cache HTML Agility Pack для вставки переменной в выбранный узел?

Я создал свою HTML-форму, загрузил ее и выбрал нужный входной узел, и теперь я хотел бы ввести в поле значения ответ SAML

Вот немного кода, который у меня есть, сначала HTML-документ:

<html xmlns="http://www.w3.org/1999/xhtml">
<head  id="Head1" runat="server">
    <title></title>
</head>
<body runat="server" id="bodySSO">
    <form id="frmSSO" runat="server" enableviewstate="False">
        <div style="display:none" >
            <input id="SAMLResponse" name="SAMLResponse" type="text" runat="server" enableviewstate="False" value=""/>
            <input id="Query" name="Query" type="text" runat="server" enableviewstate="False" value=""/>
        </div>
    </form>
</body>
</html>

и вот функция, которая загружает документ HTML и выбирает нужный узел:

public static string GetHTMLForm(SamlAssertion samlAssertion)
{
    HtmlAgilityPack.HtmlDocument HTMLSamlDocument = new HtmlAgilityPack.HtmlDocument();
    HTMLSamlDocument.Load(@"C:\HTMLSamlForm.html");
    HtmlNode node = HTMLSamlDocument.DocumentNode.SelectNodes("//input[@id='SAMLResponse']").First();

    //Code that will allow me to inject into the value field my SAML Response
}

РЕДАКТИРОВАТЬ:

Итак, я достиг инъекции пакета SAML Response в поле «value» тега ввода html следующим образом:

HtmlAgilityPack.HtmlDocument HtmlDoc = new HtmlAgilityPack.HtmlDocument();
String SamlInjectedPath = "C:\\SamlInjected.txt";
HtmlDoc.Load(@"C:\HTMLSamlForm.txt");
var SAMLResposeNode = HtmlDoc.DocumentNode.SelectSingleNode("//input[@id='SAMLResponse']").ToString();
SAMLResposeNode = "<input id='SAMLResponse' name='SAMLResponse' type='text' runat='server' enableviewstate='False' value='" + samlAssertion + "'/>";

Теперь мне просто нужно добавить этот тег обратно в исходный HTML-документ

Принятый ответ

Хорошо, я решил это, используя следующее:

HtmlAgilityPack.HtmlDocument HtmlDoc = new HtmlAgilityPack.HtmlDocument();
HtmlDoc.Load(@"C:\HTMLSamlForm.html");
var SamlNode = HtmlNode.CreateNode("<input id='SAMLResponse' name='SAMLResponse' type='text' runat='server' enableviewstate='False' value='" + samlAssertion + "'/>");
foreach (HtmlNode node in HtmlDoc.DocumentNode.SelectNodes("//input[@id='SAMLResponse']"))
{
    string value = node.Attributes.Contains("value") ? node.Attributes["value"].Value : "&nbsp;";
    node.ParentNode.ReplaceChild(SamlNode, node);
}

Затем, чтобы проверить содержимое нового HTML-файла, я выводил его, используя это:

System.IO.File.WriteAllText(@"C:\SamlInjected.txt", HtmlDoc.DocumentNode.OuterHtml);


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow