【问题标题】:Returning the contents of a HTML div with Powershell使用 Powershell 返回 HTML div 的内容
【发布时间】:2014-12-15 10:28:55
【问题描述】:

我有一个类似结构化 HTML 文件的目录(给出了两个示例):

文件-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>

文件-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 脚本来返回从所有 html 中删除的 bar div 的内容:

对于 File-1.html:bar 对于 File-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 元素。

我做错了什么?

【问题讨论】:

  • $content 有值吗?该错误告诉您,您正在调用方法的变量是 null
  • 是的,当我执行echo $content 时,会返回 File-1.html 的 HTML。
  • 好的,$content.ParsedHtml 怎么样?
  • 因为 $content 没有名为 ParsedHtml 的属性,所以我认为 powershell 默认不支持解析 html 文件。您可以尝试使用htmlagilitypack.codeplex.com。或者您可以将该行视为字符串并尝试使用 REGEX 获取标记的内容
  • 哈哈 :) 对不起,我自己不是正则表达式大师 :) 我能给你的唯一提示是尝试 regex101.com,它会显示语法错误和其他东西。也看这里:stackoverflow.com/questions/11306596/…

标签: html powershell xml-parsing html-parsing


【解决方案1】:

你可以试试这样的:

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

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

 Write-Output $bar.InnerXML

【讨论】:

    【解决方案2】:

    你可以这样做:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      • 2014-03-28
      • 2014-02-23
      • 2018-10-29
      • 2018-06-19
      • 2018-03-17
      • 1970-01-01
      相关资源
      最近更新 更多