【问题标题】:InternetExplorer.Application COM object's getElementById method not workingInternetExplorer.Application COM 对象的 getElementById 方法不起作用
【发布时间】:2018-08-06 16:11:40
【问题描述】:

我对 powershell 很陌生,我正在尝试自动登录网站,我浏览了很多示例,但没有一个可以正常工作。

以这个非常简单的脚本为例:

$ie = New-Object -comobject InternetExplorer.Application
$ie.Visible = $true
$ie.Navigate($URL)
$ie.Navigate("www.facebook.com")
$ie.document.getElementById("pass")
$ie.document.getElementById("pass").value = "Hi"

我应该在密码字段中得到“嗨”,但我得到的是这个

在我找到的所有示例中都出现此错误,这是怎么回事? Powershell 不再支持此功能吗?

我有 Windows 10。

【问题讨论】:

  • Do not post images of code or errors! 图片和截图可以很好地添加到帖子中,但请确保帖子在没有它们的情况下仍然清晰且有用。如果您发布代码或错误消息的图像,请确保您也复制并粘贴或直接在帖子中输入实际代码/消息。

标签: powershell browser-automation


【解决方案1】:

不要使用getElementById。使用IHTMLDocument3_getElementById,例如:

$ie.Document.IHTMLDocument3_getElementById("email").value = "asd123"

您也可以对其他方法执行此操作,例如IHTMLDocument3_getElementsByName

我应该补充一点,我不知道为什么这有效 - 我只是使用以下查询在 Document 对象上查找任何有用的成员并玩弄它们

$ie.Document | Get-Member | where Name -like '*get*'

【讨论】:

  • Powershell 文档非常糟糕且令人困惑。
  • 我得到:在此对象上找不到属性“值”。验证该属性是否存在并且可以设置。在 line:5 char:1 + $ie.Document.IHTMLDocument3_getElementById("pass").value = "asd123" + ~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (: ) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound
  • 它适用于我使用 IE 11 的“电子邮件”和“通行证”。尝试将$ie.Document.IHTMLDocument3_getElementById("pass") 传递到Get-Member 以查看它有哪些可用成员(我可以看到一个名为“值”的成员)
  • 确实有: value 属性字符串 value () {get} {set}
  • 在这种情况下,我不知道为什么您的代码不起作用,但我的代码起作用 - 抱歉 :( 但是,顺便说一下,花一个小时了解 Powershell 管道(很多好的网上讨论)。这是 PowerShell 中的一个非常基本的概念,理解起来非常重要。它与传统管道(例如在 Bash 中)有点不同,因为您将对象传递到管道中,而不是字符串。
猜你喜欢
  • 1970-01-01
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 2015-02-19
  • 1970-01-01
相关资源
最近更新 更多