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!
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>
Eigentlich bin ich kein Benutzer von PowerShell, aber laut diesem Blogbeitrag möchten Sie vielleicht Folgendes ausprobieren:
[HtmlAgilityPack.HtmlNode.ElementsFlags]::Remove("form")