Powershell 2.0 - Verwenden von HtmlAgilityPack, um untergeordnete Elemente von FORM zu erhalten

html html-agility-pack html-parsing powershell

Frage

Das Hauptproblem rührt von der Tatsache her, dass HtmlAgiltyPack standardmäßig keine untergeordneten Knoten von einem <form> -Element erhält. Weitere Informationen finden Sie unter So rufen Sie alle Eingabeelemente in einem Formular mit HtmlAgilityPack ab, ohne einen Null-Referenzfehler zu erhalten.

Das Problem ist, dass Link zeigt, wie das Problem in C # behoben werden kann, aber ich muss es in PowerShell beheben. Irgendwelche Ideen?


Ich werde mein HTML vereinfachen

<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>

Jetzt sehe ich, dass ich, wenn ich das <form> -Element auswähle, keine Kinder zurückbekomme, weshalb ich die <input> -Elemente nicht auswählen konnte.

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

Sie können sehen, dass HasChildNodes gleich Falsch ist.

Von dem von mir bereitgestellten C # HtmlNode.ElementsFlags.Remove("form"); muss ich irgendwie HtmlNode.ElementsFlags.Remove("form"); aber ich kann nicht herausfinden, was in PowerShell eingeben würde, die äquivalent wären.

Danke noch einmal!


BEARBEITEN

Danke an har07, dass er mich in die richtige Richtung weist. [HtmlAgilityPack.HtmlNode]::ElementsFlags.Remove("form") war, was ich ausführen musste.

Beachten Sie, dass ich diesen Befehl ausführen muss, bevor ich den HTML-Code einlege.

> 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>

Akzeptierte Antwort

Eigentlich bin ich kein Benutzer von PowerShell, aber laut diesem Blogbeitrag möchten Sie vielleicht Folgendes ausprobieren:

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


Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow