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