2014-07-13 30 views
1

去年,我使用瞭解析一個節日頁面的HTML(併爲我的Windows Phone應用程序生成XML)的powershell(v3)腳本。HTMLDocumentClass和getElementsByClassName不起作用

我也是asking a question關於它在這裏,它的工作就像一個魅力。

但是,當我今年運行腳本,它不工作。具體 - 方法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 

這個工作,但是這似乎愚蠢的解決方案我。
任何人都知道我在做什麼錯?

+0

我會認爲這是一個錯誤。 –

+0

您安裝了哪個版本的Internet Explorer? Inovoke-WebRequest使用IE引擎來解析HTML,直到第9版纔在IE中支持「getElementsByClassName」。 –

+0

我在Windows 8上安裝了IE10。 – jumbo

回答

2

我實際上是由放棄Invoke-WebRequest cmdlet,並通過採用HtmlAgilityPack解決了這個問題。

我將以前的順序HTML解析轉換爲少數XPath查詢(所有內容都保留在PowerShell腳本中)。這個解決方案更優雅,HtmlAgilityPack是真正的壞蛋;)真的很榮幸能像這樣使用項目!

相關問題