【问题标题】:Automate (IE ComObject) Fill Textboxes自动化(IE ComObject)填充文本框
【发布时间】:2019-11-15 00:32:35
【问题描述】:

我正在尝试自动化 Outlook Web Access 网站,填写一些文本框并单击按钮,

我可以在第一页(登录)和提交按钮中找到相关元素,所以我通过了登录阶段,我的问题是在一些带有屏蔽文本框的页面中找到元素,我附上了快照3个步骤,还有对象的DOM图片。

$IE = New-Object -ComObject InternetExplorer.Application
$URL = 'https://somewebsite/ecp/?rfr=owa&p=PersonalSettings/Password.aspx'
$IE.Visible = $true
$IE.Navigate($URL)
While ($IE.Busy -eq $true) {Start-Sleep -Milliseconds 2000} 

$ie.Document.getElementById('username').value = "username"
$ie.Document.getElementById('password').value = "password"
$Submit = $ie.Document.getElementsByTagName('Input') | ? {$_.Type -eq "Submit"}
$Submit.click()

到目前为止一切顺利,我的问题从里面的页面开始,我只是找不到密码字段的文本框元素,

还有这些元素的 DOM 快照:

非常感谢任何帮助

【问题讨论】:

  • 您可以将 WASP 用于 PowerShell link 。导入模块。一旦在靠近您需要去的地方的页面上,您可以使用 $IE |发送键“{TAB}”一定次数以浏览网页以到达您想要的位置。
  • wasp 不是一个选项,应该在多个系统上运行,WShell.SendKey 也不是一个选项,根本不稳定

标签: html internet-explorer powershell automation comobject


【解决方案1】:

我在尝试 automate a file upload on sharepoint 时遇到了同样的问题。 诀窍是上传表单在新框架内打开。

<iframe id="Dlg..." class="ms-dlgFrame" src="https://.../Upload.aspx?List=..."></iframe>

因此,为了获得输入字段,我必须查看每个打开的帧并选择位置良好的帧:

for($i=0;$i -lt $ie.Document.frames.length;$i++){
   if( $ie.Document.frames.item($i).location.href -match 'upload.aspx' ){
       $frm=$ie.Document.frames.item($i)}
 }

从那时起,我能够定位输入字段:

$frm.document.body.getElementById("txtOldPwd") 

【讨论】:

    【解决方案2】:

    使用 UI 自动化是可能的。我们可以使用自动化 ID 轻松检测元素,我们可以轻松执行读/写操作。但我不知道您是否喜欢使用 UI 自动化,如果它很好,那么我我想我可以帮你。 UI自动化有很多选择,例如

    1)UI 自动化。

    2)白色

    3)watin.etc.,

    如果您对任何框架感到满意,那么我想我可以帮助您。

    【讨论】:

    【解决方案3】:

    好的,我找到了:)

    问题是该网站有两个iframe 标签,一个在另一个内,

    $IFrame = $ie.Document.getElementsByTagName('iframe').item(0)
    $IFrame = $IFrame.contentWindow.document.getElementsByTagName('iframe').item(0)
    $PasswordSlab = $IFrame.contentWindow.document.getElementById('passwordSlab')
    $PasswordSlab.document.getElementById('txtOldPwd').value = $OldPassword
    $PasswordSlab.document.getElementById('txtNewPwd').value = $NewPassword
    $PasswordSlab.document.getElementById('txtConfirmPwd').value = $NewPassword
    $PasswordSlab.document.getElementById('save').click()
    

    谢谢大家

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-20
      • 1970-01-01
      • 2012-03-04
      • 2014-10-04
      • 2010-12-13
      • 2015-04-19
      • 2017-04-27
      相关资源
      最近更新 更多