Powershell 2.0 - Utilizzo di HtmlAgilityPack per ottenere elementi figlio di FORM

html html-agility-pack html-parsing powershell

Domanda

Il problema principale deriva dal fatto che HtmlAgiltyPack non otterrà i nodi figli da un elemento <form> per impostazione predefinita. Vedi Come ottenere tutti gli elementi di input in un modulo con HtmlAgilityPack senza ottenere un errore di riferimento null per ulteriori informazioni.

Il problema è che quel collegamento mostra come risolvere il problema in C #, ma ho bisogno di risolverlo in PowerShell. Qualche idea?


Semplificherò il mio codice 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>

Ora vedo che quando seleziono l'elemento <form> , non riavrò figli, quindi perché non posso selezionare gli elementi <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

È possibile vedere che HasChildNodes è uguale a false.

Dal collegamento C # che ho fornito, ho in qualche modo bisogno di eseguire HtmlNode.ElementsFlags.Remove("form"); ma non riesco a capire cosa scrivere in PowerShell che sarebbe equivalente.

Grazie ancora!


MODIFICARE

Grazie a har07 per avermi indicato nella giusta direzione. [HtmlAgilityPack.HtmlNode]::ElementsFlags.Remove("form") era ciò che dovevo eseguire.

Nota che ho bisogno di eseguire quel comando prima di caricare nell'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>

Risposta accettata

In realtà non sono un utente di PowerShell, ma in base a questo post del blog , potresti provare qualcosa del genere:

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


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché