2012-09-17 100 views
3

我試圖在PowerShell中編寫腳本,我可以使用該腳本在查詢運行後從網站獲取HTML。使用DOM從網站獲取HTML

在我自己的機器上,我可以運行下面的工作沒有問題,但是當我嘗試在Server 2008機器上運行它時,我從Document.Body.InnerHTML命令沒有輸出,所有Document.GetElementById部件沒有問題的工作。

$ie = New-Object -com InternetExplorer.Application 
    $ie.silent = $true 
    $ie.navigate2("http://www.mxtoolbox.com/") 
    while($ie.busy) {start-sleep 1} 
    $ie.Document.getElementById("ctl00_ContentPlaceHolder1_txtToolInput").Value = "mx:domain.co.uk" 
    $ie.Document.getElementById("ctl00_ContentPlaceHolder1_btnAction").Click() 
    Start-Sleep -Seconds 10 
    $ie.Document.body.innerHTML | Out-File "C:\NETESP\MXRecords\MXRecordsHTML.txt" -Encoding ASCII 
    $ie.Quit() 

有什麼我需要安裝在服務器2008年的盒子,使這個返回一個值?

在此先感謝

+0

你能從一個IE用戶會話訪問URL嗎?安全策略允許導航? –

+0

嗨基督教徒,我可以訪問服務器上的網頁,腳本也可以提交的價值,並單擊查找按鈕來檢索結果。這是當我試圖在問題發生的最後得到HTMl時。 – steveo448

+0

我也設置了'$ ie.Visible = $ true'來代替'$ ie.silent = $ true',但這沒有什麼區別。 – steveo448

回答

3

可能是一個計時問題?我不能在2008年測試,但試試這個:

$ie = New-Object -com InternetExplorer.Application 
$ie.silent = $false 
$ie.navigate2("http://www.mxtoolbox.com/") 
while($ie.busy) {start-sleep 1} 
$ie.Document.getElementById("ctl00_ContentPlaceHolder1_txtToolInput").Value = "mx:domain.co.uk" 
$ie.Document.getElementById("ctl00_ContentPlaceHolder1_btnAction").Click() 

# wait for the result page 
While($ie.LocationURL -eq 'http://www.mxtoolbox.com/') { 
    Write-Warning "Waiting for result" 
    Start-sleep 1 
} 

# grab the table html 
$table = $ie.Document.getElementsByTagName('TABLE') | Where-Object {$_.className -eq 'table table-striped table-bordered table-condensed tool-result-table'} 
$table.outerHTML | Out-File "C:\NETESP\MXRecords\MXRecordsHTML.txt" -Encoding ASCII 
$ie.Quit() 
+0

嗨謝謝,感謝您對此的幫助。你給出的代碼並不直接工作,但你的想法確實讓我走上了另一條路,我現在已經能夠從僅使用一個div ID的HTML版本中獲得HTML,它包含我想要的而不是整個頁面。 – steveo448