Powershell 2.0: uso de HtmlAgilityPack para obtener elementos secundarios de FORM

html html-agility-pack html-parsing powershell

Pregunta

El principal problema se deriva del hecho de que HtmlAgiltyPack no obtendrá nodos secundarios de un elemento <form> predeterminada. Consulte Cómo obtener todos los elementos de entrada en un formulario con HtmlAgilityPack sin obtener un error de referencia nulo para obtener más información.

El problema es que ese enlace muestra cómo solucionar el problema en C #, pero necesito solucionarlo en PowerShell. ¿Algunas ideas?


Voy a simplificar mi 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>

Ahora veo que cuando selecciono el elemento <form> , no recupero ningún elemento secundario, por lo que no pude seleccionar los elementos <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

Puedes ver que HasChildNodes es igual a falso.

Desde el enlace de C # que proporcioné, de alguna manera necesito ejecutar HtmlNode.ElementsFlags.Remove("form"); pero no puedo averiguar qué escribir en PowerShell sería equivalente.

¡Gracias de nuevo!


EDITAR

Gracias a har07 por apuntarme en la dirección correcta. [HtmlAgilityPack.HtmlNode]::ElementsFlags.Remove("form") era lo que necesitaba para ejecutar.

Tenga en cuenta que necesito ejecutar ese comando antes de cargar en el 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>

Respuesta aceptada

En realidad no soy un usuario de PowerShell, pero de acuerdo con esta publicación del blog , es posible que desee probar algo como esto:

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


Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow