Powershell 2.0 - HtmlAgilityPack을 사용하여 FORM 요소의 하위 항목 가져 오기

html html-agility-pack html-parsing powershell

문제

주요 문제는 HtmlAgiltyPack이 기본적으로 <form> 요소에서 자식 노드를 가져 오지 않는다는 사실에서 유래했습니다. 자세한 내용 은 null 참조 오류가 발생하지 않고 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