Powershell 2.0 - 使用HtmlAgilityPack来获取FORM元素的子元素

html html-agility-pack html-parsing powershell

主要问题源于HtmlAgiltyPack默认情况下不会从<form>元素获取子节点。有关详细信息,请参阅如何使用HtmlAgilityPack获取表单中的所有输入元素,而不会出现空引用错误

问题是,该链接显示了如何在C#中修复问题,但我需要在PowerShell中修复它。有任何想法吗?


我会简化我的HTML

<form method="POST" action="post.aspx" id="form">
    <div>
        <input type="hidden" name="test1" id="test1" value="1" />
    </div>
    <input type="text" name="test2" id="test2" value="12345" />
</form>

现在我看到当我选择<form>元素时,我没有让任何孩子回来,因此我无法选择<input>元素。

Add-Type -Path "C:\Program Files (x86)\HtmlAgilityPack\HtmlAgilityPack.dll"
$HTMLDocument = New-Object HtmlAgilityPack.HtmlDocument
$HTMLDocument.Load("C:\users\smithj\Desktop\test2.html")
$inputNodes=$HTMLDocument.DocumentNode.SelectNodes("//form")
$inputNodes

# Output shortened to show important bits ...
ChildNodes           : {}
HasChildNodes        : False

您可以看到HasChildNodes等于false。

从我提供的C#链接,我不知何故需要运行HtmlNode.ElementsFlags.Remove("form");但我无法弄清楚在PowerShell中键入的内容是什么。

再次感谢!


编辑

感谢har07让我指向正确的方向。 [HtmlAgilityPack.HtmlNode]::ElementsFlags.Remove("form")是我需要运行的。

请注意,我需要加载HTML 之前运行该命令。

> Add-Type -Path ".\Net40\HtmlAgilityPack.dll"
> [HtmlAgilityPack.HtmlNode]::ElementsFlags.Remove("form")
True
>
> $HTMLDocument = New-Object HtmlAgilityPack.HtmlDocument
> $HTMLDocument.Load(".\file.html")
> $HTMLDocument.DocumentNode.SelectNodes("//form")

# Output shortened to show important bits ...
ChildNodes           : {#text, div, #text, input...}
HasChildNodes        : True
OuterHtml            : <form method="POST" action="post.aspx" id="form">
                           <div>
                               <input type="hidden" name="test1" id="test1" value="1">
                           </div>
                           <input type="text" name="test2" id="test2" value="12345">
                       </form>

一般承认的答案

实际上我不是PowerShell的用户,但根据这篇博文 ,您可能想尝试这样的事情:

[HtmlAgilityPack.HtmlNode.ElementsFlags]::Remove("form")


Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow