взаимодействовать со второй вкладкой браузера от powershell - PullRequest
0 голосов
/ 12 декабря 2018

Я написал сценарий powershell для автоматического входа на веб-сайт.Работает нормально.Я хотел бы расширить сценарий для открытия другого сайта в новой вкладке и автоматически войти в систему. Я могу открыть вторую вкладку без проблем, но код для передачи учетных данных выполняется на первой вкладке вместовторая вкладка.Чтобы убедиться в этом, я быстро нажал кнопку «Назад» на первой вкладке, чтобы вернуться к экрану входа в систему, прежде чем открылась вторая вкладка, и наблюдал, как, хотя вторая вкладка была первой, сценарий пытался войти в систему.Первая открытая вкладка.Как я могу гарантировать, что код скрипта взаимодействует со следующей открытой вкладкой вместо первой открытой вкладки.Полный код, который я использую ниже.Спасибо за внимание.

 #Create an IE object
$ie = New-Object -ComObject 'internetExplorer.Application'
$ie.Visible = $true

#Open the site
$ie.Navigate("www.mysite.com")

#Pauses the script to wait for the site to load
while($ie.Busy -eq $true){Start-Sleep -seconds 3;}

#Feeds the credentials to the form 
#Note: you will need to view the source code of your site to get the correct element IDs
$usernamefield = $ie.Document.getElementByID('username')
$usernamefield.value = 'myuser'
$passwordfield = $ie.Document.getElementByID('password')
$passwordfield.value = 'mypassword'
while($ie.Busy -eq $true){Start-Sleep -seconds 2;}
$submitButton = $ie.document.getElementByID('loginbutton').click()
#######################################################################################################
while($ie.Busy -eq $true){Start-Sleep -seconds 5;}
#Open site 2
$ie.Navigate2("www.myothersite.com", 2048)
$ie.Visible = $true
#Pauses the script to wait for the site to load
while($ie.Busy -eq $true){Start-Sleep -seconds 3;}

#Feeds the credentials to the form 
#Note: you will need to view the source code of your site to get the correct element IDs
$usernamefield = $ie.Document.getElementByID('username')
$usernamefield.value = 'myuser'
$passwordfield = $ie.Document.getElementByID('password')
$passwordfield.value = 'mypassword'
while($ie.Busy -eq $true){Start-Sleep -seconds 2;}
$submitButton = $ie.document.getElementByID('loginbutton').click()

1 Ответ

0 голосов
/ 12 декабря 2018

Проблема заключается в том, что IE не дает никаких указаний для нового открытого экземпляра веб-браузера.И да, вкладки считаются новыми браузерами.Итак, вы должны использовать window.shell для поиска нового объекта.

В этом обсуждении есть еще некоторые подробности, когда вам нужно активировать определенную вкладку после факта.

$ie = New-Object -ComObject 'internetExplorer.Application'

$ie.Navigate("https://example.com/")

$ie.Visible = $true

do { sleep 1 } until (-not $ie.Busy)

write-host "Working with tab " $ie.LocationUrl

### Open second tab

$SOUrl = "https://stackoverflow.com/"

$ie.Navigate($SOUrl, 0x800)
do { sleep 1 } until (-not $ie.Busy)

$win = (New-Object -comObject shell.Application)

do {
    $so_ie = (@($win.windows() | ? { $_.HWND -eq $ie.HWND -and $_.locationURL -eq $SOUrl })[0])
    sleep 1
} until ($so_ie)


write-host "Working with tab " $so_ie.LocationUrl
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...