我正在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的Navigate方法中。
當指定navOpenInNewWindow或navOpenInNewTab,主叫方沒有收到新窗口的WebBrowser對象的引用,所以沒有對其進行操作立竿見影的辦法。
因此,鑑於我無法通過Navigate方法獲得對新瀏覽器對象的引用,我需要以另一種方式獲取對它的引用。
如何獲得對新的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,但對我而言,解決方案仍不是很明顯。
你和我在同一條軌道上,我無法將我的答案放到代碼中!在我的腦海中,我想我可以回到操作系統並通過使用HWND獲取IE引用。我還在探索我的對象繼承,以查看我是否無法使用我的$ ie引用來訪問父對象容器,然後獲取對數組的引用。總的來說,我確實喜歡你的解決方案。美麗的工作! – slmaq