Я пишу сценарий в Powershell, который откроет для меня ряд вкладок и войдет в каждую открытую вкладку. Пока мой сценарий довольно стандартный.Как получить ссылку на объект IWebBrowser
$ipaddresses = #some array of ip addresses
$ie = New-Object -ComObject internetexplorer.application
$ie.Visible = $true
for ($i = 0; $i -lt 1; $i++) {
$url = "http://"+($ipaddresses[$i])+":8000"
if($i -eq 0) {$ie.Navigate($url+"/login",0)} else {$ie.Navigate($url+"/login",2048)}
while($ie.Document.readyState -ne "complete") { Start-Sleep -Milliseconds 100 }
$ie.Document.getElementById("submitButton").click()
while($ie.Document.readyState -ne "complete") { Start-Sleep -Milliseconds 100 }
}
Моей самая большая проблема в том, что всякий раз, когда метод навигации называется, моя ссылка на мою новую вкладку теряется и ссылка на мою существующую вкладку все еще используется. Новая вкладка создана и переместится на нужную страницу, но вызовы Document.readyState и Document.getElementByID(). Click() вызывается на моей первой вкладке в течение цикла for. Я исследовал это, и я обнаружил, что это поведение задокументировано в методе навигации в MSDN https://msdn.microsoft.com/en-us/library/aa752093(v=vs.85).aspx.
Когда navOpenInNewWindow или navOpenInNewTab задан, то вызывающий абонент не получит ссылку на объект WebBrowser для нового окна, так что нет никакого непосредственного способа манипулировать ею.
Таким образом, учитывая, что я не могу получить ссылку на мой новый объект веб-браузера с помощью метода навигации, мне нужно получить ссылку на него другим способом.
Как получить ссылку на новый объект WebBrowser?
Для справки я рассмотрел документацию по объекту InternetExplorer, https://msdn.microsoft.com/en-us/library/aa752084(v=vs.85).aspx и документацию по управлению WebBrowser, https://msdn.microsoft.com/en-us/library/w290k23d(v=vs.110).aspx, и решение по-прежнему не кажется мне очевидным.
Вы были на том же треке, что и я, я просто не мог поместить свой ответ в код! В голове мне показалось, что я могу вернуться к ОС и получить ссылку на IE с помощью HWND. Я также изучал свое наследование объектов, чтобы узнать, не могу ли я использовать ссылку на $ ie, чтобы перейти к контейнеру родительского объекта, а затем получить ссылку на мой массив. В целом, мне нравится ваше решение. Прекрасная работа! – slmaq