Powershell 2.0 - Использование HtmlAgilityPack для получения детей из элементов FORM

html html-agility-pack html-parsing powershell

Вопрос

Основная проблема связана с тем, что 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")


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow