我创建了一个函数"Query-ComDomElements.ps1“来查询HTML对象。
当只查询一个对象并再次查询该对象时,此操作非常好。
但是,当我尝试在递归中调用它时,它会失败,我不明白为什么。代码/对象是/完全相同的。
有谁能告诉我为什么查询.container>img不起作用,而是查询.container,而用它查询img呢?
在查询这两个函数(从而递归调用该函数)时,我得到的错误是:
调用带有"5“参数的"InvokeMember”的异常:“未知名称。(来自HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME)的异常)”位于C:\path\to\Query-ComDomements.ps1:31 char:5 +. $result = System.__ComObject.InvokeMember("getElementsB .+~+ CategoryInfo : NotSpecified:(:) ],MethodInvocationException + FullyQualifiedErrorId : COMException
在这里,我的示例脚本(函数Query-ComDomElements.ps1没有包含,而是放在github上):
. C:\path\to\Query-ComDomElements.ps1
$ie = New-Object -ComObject "InternetExplorer.Application"
$ie.Navigate2("https://www.gpunktschmitz.de/")
while($ie.Busy) {
    Start-Sleep -Seconds 1
}
#this works
$imgContainer = Query-ComDomElements -Query '.container' -Dom $ie.Document
$image = Query-ComDomElements -Query 'img' -Dom $imgContainer -Property 'src'
#this fails
$image = Query-ComDomElements -Query '.container>img' -Dom $ie.Document -Property 'src'
$ie.quit()发布于 2018-01-08 11:08:26
我认为问题的出现是因为在第二次迭代时,$dom最终是一个包含两个元素的数组。解决这个问题的一个(脏)方法是使用Select-Object来获取第一个元素(建议使用Select而不是[0],这样如果它不是数组,就不会出错):
if($SecondQuery -eq $false) {
    if($Property -ne $false -and $Property -ne '*') {
        return $result.$Property
    } else {
        return $result
    }
} else {
    return Query-ComDomElements -Query $SecondQuery -Dom ($result | select -first 1) -Property $Property
}https://stackoverflow.com/questions/48147752
复制相似问题