Автоматизация (IE ComObject) Заполнение текстовых полей
Я пытаюсь автоматизировать веб-сайт 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 для этих элементов:
![введите описание изображения здесь]()
Я очень ценю любую помощь
Ответы
Ответ 1
OK Я нашел это:)
Проблема заключалась в том, что на сайте было два IFrames, один внутри другого,
$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()
Спасибо всем
Ответ 2
У меня была такая же проблема при попытке автоматизировать загрузку файла в 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")
Ответ 3
Это возможно с использованием UI Automation.there мы можем легко обнаружить элемент с помощью идентификатора Automation ID, и мы можем легко выполнить операцию чтения/записи. Но я не знаю, удобны ли вы с помощью автоматизации пользовательского интерфейса, если его штраф тогда я Думаю, я могу вам помочь.
в автоматизации пользовательского интерфейса есть много возможностей, таких как
1) Автоматизация пользовательского интерфейса.
2) Белый
3) watin.etc.,
если вам удобно с любой структурой, я думаю, что смогу вам помочь.