使用Powershell返回HTML div的内容

mrzz3bfm  于 2023-02-12  发布在  Shell
关注(0)|答案(2)|浏览(174)

我有一个类似结构化HTML文件的目录(给出了两个例子):
File-1.html

<html>
    <body>
        <div class="foo">foo</div>
        <div class="bar"><div><p>bar</p></div></div>
        <div class="baz">baz</div>
    </body>
</html>

File-2.html

<html>
    <body>
        <div class="foo">foo</div>
        <div class="bar"><div><p>apple<br>banana</p></div></div>
        <div class="baz">baz</div>
    </body>
</html>

我正在尝试创建一个Powershell脚本来返回bar div的内容,从所有html中剥离出来:
对于文件-1.html:bar用于文件-2.html:apple banana
我现在有:

$directory = "C:\Users\Public\Documents\Sandbox\HTML"

foreach ($file in Get-ChildItem($directory))
{
    $content = Get-Content "$directory\$file"

    echo $content.ParsedHtml.getElementById("bar").innerHTML
}

这将返回一个错误:

You cannot call a method on a null-valued expression. 
At C:\Users\Public\Documents\Sandbox\parse-html.ps1:9 char:2 
+     echo $content.ParsedHtml.getElementById("bar").innerHTML`

我不理解这个错误,因为bar是一个HTML元素。
我哪里做错了?

rdrgkggo

rdrgkggo1#

你可以试试这样的方法:

$content = Get-Content File-1.html
 $xmlContent = [xml]$content

 $bar = $xmlContent.html.body.div | where {$_.div -eq 'bar'}

 Write-Output $bar.InnerXML
dddzy1tm

dddzy1tm2#

你可以这样做:

$text = Get-Content File-1.html
$html = New-Object -ComObject "HTMLFile"
$html.IHTMLDocument2_write($text)
$bar = $html.body.getElementsByClassName('bar')[0]
$bar.innerText

相关问题