Powershell:-UseBasicParsing不返回所有src元素

时间:2018-02-01 04:23:46

标签: powershell

我正在尝试构建一个简单的蜘蛛,它从网页(而不是整个网站)返回图像的网址。我正在使用它:

  $iwr=Invoke-WebRequest -Uri "$Uri" -UseBasicParsing

但是,最近,我发现有时它并没有返回所有的图像网址,特别是我想要的图像。并且,删除-UseBasicParsing开关解决了以下问题:

$iwr=Invoke-WebRequest -Uri "$Uri"

但是,它会产生另一个问题。 [编辑]我一执行下面的语句:

$iwr.Images

$iwr.Images.src

它会弹出一个弹出窗口

"You ll need an app to open this about."

我已经在几天前首次配置了我的Internet Explorer,我已经重新检查了它。我将用户代理更改为chrome,我仍然弹出。  如何阻止任何网页/网站的弹出窗口?

[编辑]:一个更有效的脚本解决了这个问题,它仍然使用-UseBasicParsing开关。它不会给出任何弹出窗口,但会返回所有图片网址,包括某种“蒙面”网址。归功于@postanote如下:

            Clear-Host
            # Regular expression Urls terminating with '.jpg' or '.png' for domain name space
            $regexDomainAddress = "[(http(s)?):\/\/(www\.)?a-z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-z0-9@:%_\+.~#?&//=]*)((.jpg(\/)?)|(.png(\/)?)){1}(?!([\w\/]+))"
            $images=((Invoke-WebRequest –Uri $url -UseBasicParsing).Images `
            | Select-String -pattern $regexDomainAddress -Allmatches `
            | ForEach-Object {$_.Matches} `
            | Select-Object $_.Value -Unique).Value -replace 'href=','' `
            | Select-Object -Unique

1 个答案:

答案 0 :(得分:1)

你试图做的事情与这篇文章非常相似:

  

如何让输出文件包含网页上的图像和   不只是图像的链接?

     

invoke-webrequest to get complete web page with images

更新

OP更新后的跟进

使用您的确切帖子,我在我测试的系统上根本没有弹出任何弹出窗口。

 $iwr=Invoke-WebRequest -Uri "$url" -UseBasicParsing

 $iwr.Images

outerHTML   : <img id="id_p" class="id_avatar sw_spd" style="display:none" aria-hidden="true" 
              src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7" aria-label="Profile Picture" 
              onError="FallBackToDefaultProfilePic(this)"/>
tagName     : IMG
id          : id_p
class       : id_avatar sw_spd
style       : display:none
aria-hidden : true
src         : data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7
aria-label  : Profile Picture
onError     : FallBackToDefaultProfilePic(this)
...

 $iwr.Images.src
data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7
/sa/simg/sw_mg_l_4d_cct.png
http://tse3.mm.bing.net/th?id=OIP.fIx_Z6ywbsKCvY-PQkH8NAHaGN&amp;w=230&amp;h=170&amp;rs=1&amp;pcl=dddddd&amp;o=5&amp;pid=1.1
....

所以,这听起来像你主人的环境。所以,给下面的方法一个镜头,看看你是否被任何弹出窗口击中。它的代码更多,但如果适用于您的用例,可能是一个选项。

Clear-Host
# Regular expression Urls terminating with '.jpg' or '.png' for domain name space
$regexDomainAddress = "[(http(s)?):\/\/(www\.)?a-z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-z0-9@:%_\+.~#?&//=]*)((.jpg(\/)?)|(.png(\/)?)){1}(?!([\w\/]+))"
((Invoke-WebRequest –Uri $url).Links `
| Select-String -pattern $regexDomainAddress -Allmatches `
| ForEach-Object {$_.Matches} `
| Select-Object $_.Value -Unique).Value -replace 'href=','' `
| Select-Object -Unique

Clear-Host
# Regular expression Urls terminating with '.jpg' or '.png' for relative url
$regexRelativeUrl = "[a-z]{2,6}\b([-a-z0-9@:%_\+.~#?&//=]*)((.jpg(\/)?)|(.png(\/)?)){1}(?!([\w\/]+))"
((Invoke-WebRequest –Uri $url).Links `
| Select-String -pattern $regexRelativeUrl -Allmatches `
| ForEach-Object {$_.Matches} `
| Select-Object $_.Value -Unique).Value -replace 'href=','' `
| Select-Object -Unique