Powershell 2.0 - HtmlAgilityPackを使用してFORM要素の子を取得する

html html-agility-pack html-parsing powershell

質問

主な問題は、HtmlAgiltyPackがデフォルトで<form>要素から子ノードを取得しないという事実に起因しています。詳細については、null参照エラー取得せずに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");を実行する必要がありHtmlNode.ElementsFlags.Remove("form"); PowerShellに何を入力すれば同等のものになるかはわかりません。

再度、感謝します!


EDIT

正しい方向に私を向ける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