Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell HTMLDocumentClass和getElementsByClassName不工作_Powershell_Ihtmldocument2 - Fatal编程技术网

Powershell HTMLDocumentClass和getElementsByClassName不工作

Powershell HTMLDocumentClass和getElementsByClassName不工作,powershell,ihtmldocument2,Powershell,Ihtmldocument2,去年,我有一个powershell(v3)脚本,可以解析一个节日页面的HTML(并为我的Windows Phone应用程序生成XML) 我也在这里,它就像一个魅力 但是当我今年运行脚本时,它不起作用。具体来说-getElemntsByClassName方法没有返回任何内容。我在其他网页上也尝试过这种方法,但没有成功 这是我去年的代码,现在不起作用了: $tmpFile_bandInfo = "C:\band.txt" Write-Host "Stahuji kapelu $($kap.Nazev

去年,我有一个powershell(v3)脚本,可以解析一个节日页面的HTML(并为我的Windows Phone应用程序生成XML)

我也在这里,它就像一个魅力

但是当我今年运行脚本时,它不起作用。具体来说-getElemntsByClassName方法没有返回任何内容。我在其他网页上也尝试过这种方法,但没有成功

这是我去年的代码,现在不起作用了:

$tmpFile_bandInfo = "C:\band.txt"
Write-Host "Stahuji kapelu $($kap.Nazev) ..." -NoNewline    
Invoke-WebRequest http://www.colours.cz/ucinkujici/the-asteroids-galaxy-tour/ -OutFile $tmpFile_bandInfo
$content = gc $tmpFile_bandInfo -Encoding utf8 -raw
$ParsedHtml = New-Object -com "HTMLFILE"
$ParsedHtml.IHTMLDocument2_write($content)
$ParsedHtml.Close()
$bodyK = $ParsedHtml.body
$bodyK.getElementsByClassName("body four column page") # this returns NULL
$page = $page.item(0)
$aside = $page.getElementsByTagName("aside").item(0)
$img = $aside.getElementsByTagName("img").item(0)
$imgPath = $img.src
这是我用来解决这个问题的代码:

$sec = $bodyK.getElementsByTagName("section") | ? ClassName -eq "body four column page"
# but now I have no innerHTML, only the lonely tag SECTION
# so I am walking through siblings
$img = $sec.nextSibling.nextSibling.nextSibling.getElementsByTagName("img").item(0)
$imgPath = $img.src
这是可行的,但对我来说这似乎是愚蠢的解决方案。

有人知道我做错了什么吗?

我实际上通过放弃
Invoke-WebRequest
cmdlet并采用


我将以前的顺序HTML解析转换为几个XPath查询(所有内容都保留在powershell脚本中)。此解决方案更加优雅,HtmlAgilityPack是真正的坏蛋;)能和这样的项目一起工作真的很荣幸

问题不是bug,而是返回NULL是因为它实际上是对DOM模型的代理HTMLFile COM调用的引用

通过将其装箱到数组@()中,可以强制此操作并返回底层字符串,如下所示:

@($mybody.getElementsByClassName("body four column page")).textContent
如果您在其上选择了一个对象,这也会自动发生,它将通过COM将其分解并以字符串形式返回

$mybody.getElementsByClassName("body four column page") | Select-Object -Property TextContent

我认为这是一个bug。你安装了Internet Explorer上的哪个版本?Inovoke WebRequest使用IE引擎解析HTML,IE直到v9才支持
GetElementsByCassName
。我已经在Windows 8上安装了IE10。@AnsgarWiechers奇怪的是它一年前就工作了。。。