使用 ComObject 登录后如何导航到链接?

问题描述

如何使用 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 到这个新站点,因为我没有将会话存储在任何地方。

我的问题:这个问题有没有不用调用请求解决方案?

我找到了关于整个主题的非常好的指南here

在本网站的末尾,用户展示了人们可能做的事情:

现在我们已经登录,我们可以: 将 $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').

您可以根据自己的实际情况更改代码。

参考链接:

(1) HTMLIFrameElement.contentWindow

(2) Accessing a document's IFRAME via Powershell

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...