要求:我想从网页中获取所有产品名称的名称。
问题陈述:
页面完全加载后,我在下面应用了 RegEX(效果很好)来获取此页面上所有产品的名称。我的问题是它仍然给我输出,就好像没有点击“加载更多”一样。即只显示第一页的产品名称。我需要调整 DownloadString 以便它$content
在下面考虑完整的页面源(在页面完全加载后)。
下面的代码:此网页末尾有“加载更多”按钮。我运行以下脚本以单击“加载更多”按钮并继续单击它直到显示完整页面。这部分问题在另一个 SO question 中得到解决,并且运行良好。
$ie = New-Object -COMObject InternetExplorer.Application
$ie.visible = $true
$site = $ie.Navigate('https://www.xxx.com/search/all?name=sporanox')
$ie.ReadyState
while($true)
{
while ($ie.Busy -and $ie.ReadyState -ne 4){ sleep -Milliseconds 100 }
try {
$link = $ie.Document.get_links() | where-object {$_.innerText -eq 'Load More'}
if ($link -ne $null)
{
if ($link.clientHeight -eq 0)
{
break
}
$link.click()
}
else
{
break
}
}
catch
{
break
}
}
$regex = [RegEx]'"item-name prdctNm">(.*?)</a>'
$url = ‘https://www.xxx.com/search/all?name=sporanox’
$wc = New-Object System.Net.WebClient
$content = $wc.DownloadString($url)
$regex.Matches($content) | ForEach-Object { $_.Groups[1].Value }