2015-01-11 60 views
0

要求:點擊下面$ ie.navigate中指定的網頁後。我需要訪問下一個打開的Web頁面的HTML/OuterHTML源代碼。單擊後訪問下一個網頁

例如:當我打開https://www.healthkartplus.com/search/all?name=Sporanox(通過設置$ control = Sporanox),下面的代碼只需點擊第一個匹配鏈接。點擊鏈接後,我需要訪問生成頁面的HTML。

更新:提到另一個SO問題,並得知我們可以搜索適當的窗口。代碼似乎適用於某些情況,但不是所有情況。對於$ ie2,我在訪問Document屬性時遇到問題。

function getStringMatch 
{ 
    # Loop through all 2 digit combinations in the $path directory 
    foreach ($control In $controls) 
    { 
     $ie = New-Object -COMObject InternetExplorer.Application 
     $ie.visible = $true 
     $site = $ie.Navigate("https://www.healthkartplus.com/search/all?name=$control") 
     $ie.ReadyState 

     while ($ie.Busy -and $ie.ReadyState -ne 4){ sleep -Milliseconds 100 } 

     $link = $null 
     $link = $ie.Document.get_links() | where-object {$_.innerText -eq "$control"} 
     $link.click() 

     while ($ie.Busy -and $ie.ReadyState -ne 4){ sleep -Milliseconds 100 } 

     $ie2 = (New-Object -COM 'Shell.Application').Windows() | ? { 
     $_.Name -eq 'Windows Internet Explorer' -and $_.LocationName -match "^$control" 
     } 

     # NEED outerHTML of new page. CURRENTLY it is working for some. 

     $ie.Document.body.outerHTML > d:\med$control.txt 
    } 
} 

$controls = "Sporanox" 

getStringMatch 
+0

在頁面首先導航到你有兩個斯皮仁諾鏈接,你想要兩個目標的HTML?只有一個? –

+0

只是第一個。 – Powershel

回答

1

我認爲問題在於當您在第一頁中查找鏈接時。 鏈接innerText不等於$控制,它包含$控制,即innerText是「Sporanox(100mg)」。

下可能會有所幫助:

$link = $ie.Document.get_links() | where-object {if ($_.innerText){$_.innerText.contains($control)}} 

編輯

這裏是我使用的完整代碼:

function getStringMatch 
{ 
    # Loop through all 2 digit combinations in the $path directory 
    foreach ($control In $controls) 
    { 
     $ie = New-Object -COMObject InternetExplorer.Application 
     $ie.visible = $true 
     $site = $ie.Navigate("https://www.healthkartplus.com/search/all?name=$control") 
     $ie.ReadyState 

     while ($ie.Busy -and $ie.ReadyState -ne 4){ sleep -Milliseconds 100 } 

     $link = $null 
     $link = $ie.Document.get_links() | where-object {if ($_.innerText){$_.innerText.contains($control)}} 
     $link.click() 

     while ($ie.Busy) 
     { 
      sleep -Milliseconds 100 
     } 

     # NEED outerHTML of new page. CURRENTLY it is working for some. 

     $ie.Document.body.outerHTML > d:\med$control.txt 
    } 
} 

$controls = "Sporanox" 

getStringMatch 
+0

是的,單擊找到的$ link時,OuterHTML將包含新頁面。我可以在創建的文件中看到「檢查可用性」以及「第一頁中沒有1條(每個4膠囊)的Rs。304.50」。 –

+0

用我正在使用的完整代碼回答更新。 –

+0

不,你不需要它:) –