自动化(IE ComObject)填充文本框

11

我正在尝试自动化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 for PowerShell 链接。 导入模块。一旦在接近所需位置的页面上,您可以使用$IE | Send-Keys "{TAB}"一定次数来浏览网页以到达目标位置。 - Shaun Webb
黄蜂不是一个选项,应该在多个系统上运行,WShell.SendKey 也不是一个选项,完全不稳定。 - Avshalom
3个回答

1

当我尝试在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") 

0

使用UI自动化是可能的。我们可以轻松地使用自动化ID检测元素,并且可以轻松地执行读/写操作。但我不知道您是否习惯使用UI自动化,如果可以的话,我想我可以帮助您。

UI自动化有许多选项,例如:

1)UI自动化。

2)White。

3)watin.etc.,

如果你对任何一个框架感到舒适,我想我可以帮助你。


请浏览以下链接以获取简要了解:UI Path: [http://www.uipath.com/] <br/> UI Automation: [https://msdn.microsoft.com/en-us/library/ms747327(v=vs.110).aspx] White: [https://github.com/TestStack/White] Watin: [http://watin.org/] - Ravi Kanth

0

好的,我找到了 :)

问题在于该网站有两个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()

谢谢大家


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接