我需要从此网页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()
答案 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')
,但我得到了一个例外。