2015-01-11 84 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

不,你不需要它:) –