我有一个数组,$ Conventional,我需要循环并点击每次,以便我可以保存click()之后可用的PDF。
$Conventional = @()
$Conventional = $ie.Document.getElementsByTagName("td") | ? {($_.getAttributeNode('class').Value -match 'NodeDocument') -and ($_.innerText -notmatch 'Library Home')}
这填补了$ Conventional的四个td
元素,我需要循环并点击()每次。以下是我的ForEach循环,它在第一次迭代时工作正常,然后失败并在每次返回System.ComObject
之后。
ForEach ($i in $Conventional){
$text = $i.innerText
$i.click()
while ($ie.Busy -eq $true){Start-Sleep -Seconds 2}
$PDF = $ie.Document.getElementById("OurLibrary_LibTocUC_LandingPanel_libdocview1_DocViewDocMD1_hlViewDocument")
$currentURL = $PDF.href
$fileName = $baseFileName + "_" + $cleanText
Invoke-WebRequest -Uri $currentURL -OutFile $NewPath\$fileName.pdf -WebSession $freedom
}
这是我正在捕获的数组的屏幕截图。要检索PDF,需要单击每个PDF。
真的很感激任何帮助。谢谢大家
答案 0 :(得分:1)
除非您按下click,否则它可以正常工作,那么click-event可能会更改Document以足以打破$Conventional
- 数组中的元素参考。试试这种方法:
$linksToProcess = New-Object System.Collections.ArrayList
$ie.Document.getElementsByTagName("td") |
Where-Object {($_.getAttributeNode('class').Value -match 'NodeDocument') -and ($_.innerText -notmatch 'Library Home')} |
Foreach-Object { $linksToProcess.Add($_.innerText) }
while ($linksToProcess.Count -gt 0){
$i = $ie.Document.getElementsByTagName("td") | ? {($_.getAttributeNode('class').Value -match 'NodeDocument') -and ($_.innerText -eq $linksToProcess[0])}
$text = $i.innerText
$i.click()
while ($ie.Busy -eq $true){Start-Sleep -Seconds 2}
$PDF = $ie.Document.getElementById("OurLibrary_LibTocUC_LandingPanel_libdocview1_DocViewDocMD1_hlViewDocument")
$currentURL = $PDF.href
$fileName = $baseFileName + "_" + $cleanText
Invoke-WebRequest -Uri $currentURL -OutFile $NewPath\$fileName.pdf -WebSession $freedom
$linksToProcess.RemoveAt(0)
}