使用html敏捷包c#将变量注入html输入标签值

本文关键字:html 注入 输入 变量 标签 使用 | 更新日期: 2023-09-27 18:08:19

是否可以使用c# HTML敏捷包将变量插入所选节点?

我已经创建了我的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响应数据包注入html输入标签的"value"字段:

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文档

使用html敏捷包c#将变量注入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);