主要問題源於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>