IE автоматизация с помощью Powershell

Я пытаюсь автоматизировать вход на сайт в нашей интрасети, используя Powershell и IE. Пока у меня есть следующий код, который работает:

$ie = new-object -com "InternetExplorer.Application" 
$ie.navigate("https://somepage/jsp/module/Login.jsp/")
while($ie.ReadyState -ne 4) {start-sleep 1} 
$ie.visible = $true 
$doc = $ie.Document
If ($doc.nameProp -eq "Certificate Error: Navigation Blocked") {
    $doc.getElementByID("overridelink").Click()
}
$loginid = $doc.getElementById("loginid") 
$loginid.value= "username"
$password = $doc.getElementById("password")
$password.value = 'somepass'
$ie.navigate("javascript:doSubmit('login')",$null,$true)

Итак, проблемная область, которую я имею сейчас, состоит в том, что сайт закрывает исходное окно, использованное для входа в систему, и открывает новое окно IE. Как мне отправить данные в это новое окно? Я знаю, что могу использовать что-то вроде tasklist.exe /v, чтобы получить PID нового окна... но я не уверен, как бы я взял его под свой контроль.

Кроме того, после просмотра моего кода, пожалуйста, знайте, что я не собираюсь использовать встроенные имя пользователя и пароли. Это только для того, чтобы мне не приходилось постоянно вводить комбо un/pw каждый раз, когда я хочу протестировать скрипт.

3 ответа

Попробовав немного больше...

$applist = new-object -com shell.application
$newie = $applist.windows() | where {$_.Type  -eq "HTML Document" -and $_.LocationURL -match "MainFrame.jsp"}

Я нашел старую статью, в которой описывается, как сделать то, что вы ищете, циклически перебирая окна Shell.Application объект. Я должен сказать, что, хотя это выглядит возможным и, кажется, отвечает на ваш прямой вопрос, подход кажется мне довольно неприятным и хрупким.

Если вы не против попробовать другой подход, я бы посоветовал попробовать Selenium Webdriver. Вы можете использовать драйвер Internet Explorer, и примеры C# в документации обычно хорошо переводятся в PowerShell. Вы также получаете некоторые другие приятные преимущества, такие как драйверы для других веб-браузеров или возможность ожидания условия вместо того, чтобы полагаться на циклы сна / проверки. Вы также будете иметь driver.switchTo() функция, которая позволяет прыгать между окнами или фреймами.

Попробуй это.

  1. $ shell = (New-Object -ComObject Shell.Application).Windows ()
  2. $ shell.Count
  3. 7
  4. у вас есть пункты 0-6, вы можете проверить этот путь.
  5. $ Shell.Item(0).LocationName
  6. или же
  7. $ Shell.Item (0).LocationURL
  8. $ Shell.Item (1).LocationName
  9. $ Shell.Item(1).LocationURL
Другие вопросы по тегам