我似乎在这里遗漏了一些非常基本的东西,我无法弄清楚使用 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.body
或 html.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/