html - 在 Powershell 中获取 HTML Com 对象的内容

标签 html powershell powershell-5.0

我似乎在这里遗漏了一些非常基本的东西,我无法弄清楚使用 Powershell 时获取 HTML 文件内容的方法。我的初始任务是:

  • 在本地目录中打开一个 HTML 文件。
  • 查找具有特定 ID 的元素。
  • 改变它的 innerHTML。
  • 以相同的名称保存 HTML 文件

这是我获取 HTML 文件的方法。

Add-Type -path "C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll"
$html = New-Object -ComObject "HTMLFile"
$content = Get-Content -Path "test.html" -Raw
$html.IHTMLDocument2_write($content)

接下来,我找到一个 span 元素并更改其内容。当我在下面的行前后检查 echo $html.getElementById('versionNumber').innerHTML 时。元素确实发生了变化。

echo $html.getElementById('versionNumber').innerHTML  #Result: v1.0
$html.getElementById('versionNumber').innerHTML = "v.$VersionNumber"
echo $html.getElementById('versionNumber').innerHTML  #Result: v1.1

我想做的最后一件事是保存我卡住的新更改的 HTML 文件。如果 getElementId 方法有效,HTML 应该已将其全部内容保存在某处,但我找不到提取它的方法。

$html | Out-File test.html -Force   #Override the old file

$html 返回对象的所有信息,而不是内容 :( html.bodyhtml.body.outerHTML 显然赢了'fit 因为我想获取整个文件。$html.all

$html返回的示例结果

Script                            : System.__ComObject
all                               : System.__ComObject
body                              : System.__ComObject
activeElement                     : 
images                            : System.__ComObject
applets                           : System.__ComObject
links                             : System.__ComObject
forms                             : System.__ComObject
anchors                           : System.__ComObject
...

我的 Powershell 版本是 5.1。

最佳答案

我已经测试了下面的脚本并且它有效。

$VersionNumber = "1.1"
Add-Type -path "C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll"
$html = New-Object -ComObject "HTMLFile"
$content = Get-Content -Path "test.html" -Raw
$html.IHTMLDocument2_write($content)

echo $html.getElementById('versionNumber').innerHTML  #Result: v1.0
$html.getElementById('versionNumber').innerHTML = "v$VersionNumber"
echo $html.getElementById('versionNumber').innerHTML  #Result: v1.1
$content = $html.documentElement.outerHTML


$content | Out-File "test.html" -Force   #Override the old file

关于html - 在 Powershell 中获取 HTML Com 对象的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48200098/

相关文章:

powershell - ConvertFrom-String 模板存在不规则数据集问题

powershell - 使用 -PathType 参数如何影响 Test-Path 的效率?

Powershell New-ScheduledTaskSettingsSet

jquery - 用户在表单中输入信息,然后在同一页面显示表单信息

android - 当虚拟键盘在全屏显示模式下处于 Activity 状态时,PWA 不会调整窗口大小

excel - 运行 powershell 命令时出错

powershell - Azure 发布管道 Powershell 任务失败

javascript - 从文本区域获取带有字符串 ("Line no."的行号?

jquery - 使用选择列表动态加载 div 中的内容

Powershell CREDSSP 和 TLS 1.2