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!
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>
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")