首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >递归函数不能正常工作吗?

递归函数不能正常工作吗?
EN

Stack Overflow用户
提问于 2018-01-08 09:50:45
回答 1查看 107关注 0票数 1

我创建了一个函数"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上):

代码语言:javascript
运行
复制
. 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()
EN

Stack Overflow用户

回答已采纳

发布于 2018-01-08 11:08:26

我认为问题的出现是因为在第二次迭代时,$dom最终是一个包含两个元素的数组。解决这个问题的一个(脏)方法是使用Select-Object来获取第一个元素(建议使用Select而不是[0],这样如果它不是数组,就不会出错):

代码语言:javascript
运行
复制
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
}
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48147752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档