问题描述
如何使用 ComObject 导航到子站点
Add-Type -AssemblyName System.Windows.Forms
$woop=New-Object -ComObject 'internetExplorer.Application'
$woop.Visible= $true
$woop.Navigate("Link")
Start-Sleep 5;
$woop.document.IHTMLDocument3_getElementByID("Username-ID").value=$username
$woop.document.IHTMLDocument3_getElementByID("Password-ID").value=$password
$woop.document.IHTMLDocument3_getElementByID("Loggin Button").Click()
Start-Sleep 20 #20 Second timer to wait for the page to fully load
$woop.document.IHTMLDocument3_getElementByID("NewSiteContent-ID").Click()
此代码对我来说就像一个魅力,并将我带到新的子站点。 但是,在我登录站点后,我无法使用 ComObject.Navigate 到这个新站点,因为我没有将会话存储在任何地方。
在本网站的末尾,用户展示了人们可能做的事情:
现在我们已经登录,我们可以: 将 $currentDocument 变量设置为 $ieObject.Document 因为该值现在不同,因为已经加载了新页面。 通过浏览网页解析出我们需要的信息。 自动查找特定帖子
但由于某种原因我无法生成这一步。 我每次都收到相同的错误: 不能在空值表达式上调用方法
我的猜测是,它无法到达 ID 标签,因为 ComObject 仍在旧的登录网站上,因为我在登录网站后没有导航到它提供的新链接。
任何解决方案/想法?
更新 1.)
你可以用
ComObjectName.Windows()
你的状态是 ComObject。
我看到登录后 LocationURL 和 LocationName 都指向(登录成功会话)子站点。
这意味着使用新站点刷新您是 ComObject 的代码有效。
示例:$currentdocument = $woop.document
解决方法
这就是重点。您无法直接在 iframe 中访问该元素。需要先获取iframe,然后使用contentWindow.document
获取iframe中的元素。
例如,您可以使用以下代码访问 iframe 中的元素:
$ie.document.getElementById('iframeId').contentWindow.document.getElementById('elementId').
您可以根据自己的实际情况更改代码。
参考链接: