在循环中单击“加载更多”,直到完全显示页面

时间:2014-12-13 12:19:06

标签: jquery regex powershell match

我需要从此网页https://www.xxx.com/search/all?name=sporanox

中获取所有名称

在我的网页上,我有一个按钮'加载更多'这实质上意味着屏幕上还会显示更多项目。

加载更多按钮的HTML源代码如下:

a href="#" data-number="1" data-size="15" data-url="/search/paginate?name=sporanox" class="pgntnCntnrBar btn btn-primary">Load More</a><div class="loading-icon v2 hide"></div>

因此,在PowerShell中我需要一些方法,脚本可以点击“加载更多”和“#39;本身在一个循环中,以便显示整个页面。

我不熟悉PowerShell,并且在某处可以使用click()方法,所以我做了以下内容:

$regex = [RegEx]'">Load More</a>'
$url = ‘https://www.xxx.com/search/all?name=sporanox’
$wc = New-Object System.Net.WebClient
$content = $wc.DownloadString($url)
$a = $regex.Matches($content) | ForEach-Object { $_.Groups[0].Value }
$a.click()

但是我收到了一个错误:

  

方法调用失败,因为System.String不包含名为&#39; click&#39;

的方法

更新 我可以找到以下方式点击。但不知道如何把它放在循环中。

$ie = New-Object -ComObject InternetExplorer.Application
$ie.visible=$true
$ie.navigate2('https://www.xxx.com/search/all?name=sporanox')
while($ie.Busy) {Start-Sleep 1}
$links = $ie.Document.getElementsByTagName('A')
$yt = $links | where {$_.innerText -eq 'Load More'}
$yt.click()

1 个答案:

答案 0 :(得分:2)

更新,看起来他们在完成后隐藏了“加载更多”按钮。因此需要额外检查。代码更新:

$ie = New-Object -COMObject InternetExplorer.Application
$ie.visible = $true
$site = $ie.Navigate('https://www.xxx.com/search/all?name=za')
$ie.ReadyState

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

        $numTries = 0
        $link = $null
        while ($link -eq $null -and $numTries -le 5)
        {
            $link = $ie.Document.get_links() | where-object {$_.innerText -eq 'Load More'}
            if ($link -eq $null)
            {
                sleep -Milliseconds 1000
            }

            $numTries++
        }
        if ($link -ne $null)
        {
            if ($link.clientHeight -eq 0)
            {
                break
            }
            [Void]$link.click()
        }
        else
        {
            break
        }
    }
    catch
    {
        break
    }
}

PS。我想使用$ie.Document.getElementsByTagName('A'),但我得到了一个例外。