Основная проблема связана с тем, что HtmlAgiltyPack по умолчанию не получит дочерние узлы из элемента <form>
. См. Раздел Как получить все входные элементы в форме с помощью HtmlAgilityPack без получения нулевой ссылки для получения дополнительной информации.
Проблема в том, что эта ссылка показывает, как исправить проблему на C #, но мне нужно исправить ее в PowerShell. Есть идеи?
Я упрощу свой 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>
Теперь я вижу, что, когда я выбираю элемент <form>
, я не возвращаю никаких детей, поэтому я не мог выбрать элементы <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
Вы можете видеть, что значение HasChildNodes
равно false.
Из ссылки C #, которую я предоставил, мне как-то нужно запустить HtmlNode.ElementsFlags.Remove("form");
но я не могу понять, что вводить в PowerShell, что было бы эквивалентно.
Еще раз спасибо!
Спасибо har07 за то, что указали мне в правильном направлении. [HtmlAgilityPack.HtmlNode]::ElementsFlags.Remove("form")
- это то, что мне нужно было запустить.
Обратите внимание, что мне нужно запустить эту команду перед загрузкой в 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>
На самом деле я не являюсь пользователем PowerShell, но, согласно этому сообщению в блоге , вы можете попробовать что-то вроде этого:
[HtmlAgilityPack.HtmlNode.ElementsFlags]::Remove("form")