找回密码
 加入
搜索
查看: 4204|回复: 5

[IE类操作] [已解决]如何从网页中提取符合要求的链接 以实现 Win7补丁自动下载

  [复制链接]
发表于 2012-8-26 21:42:49 | 显示全部楼层 |阅读模式
本帖最后由 pvguo 于 2012-8-29 14:13 编辑

如何从网页中提取符合要求的链接 以实现  Win7补丁自动下载
因为要用dism给win7映像离线添加补丁(速度快,不用封装)
但是懒得装个原版win7再用360下载补丁
所以把雨林木风的补丁列表提取出来,然后从官网下载,因为有80多个,有手点的时间也可以写一个脚本了。。。。
具体过程如下(以单个补丁为例)
1 搜索补丁
Local $search = "http://www.microsoft.com/zh-cn/download/search.aspx?q=KB2425227"
Local $oie = _IECreate($search)
Local $fullpage = _IEBodyReadHTML($oIE)
在得到页面中要提取出以下部分


我想找的是下载链接 比如 32位的是 http://www.microsoft.com/zh-cn/download/details.aspx?id=5717
也就是说找出 <A
      href="
http://www.microsoft.com/zh-cn/download/details.aspx?id=5717"
      bi:index="0" bi:title="item">Windows 7 安全更新程序 (<B>KB2425227</B>)</A>
然后提取出链接 http://www.microsoft.com/zh-cn/download/details.aspx?id=5717

下面是网页的部分html,全部的太多了......
<DIV class=caption>安全修补程序</DIV></TD>
                                <TD bi:titleflag="item"><DIV class=link><A
      href="
http://www.microsoft.com/zh-cn/download/details.aspx?id=5717"
      bi:index="0" bi:title="item">Windows 7 安全更新程序 (<B>KB2425227</B>)</A>
</DIV>
                                  <DIV class=description>现已确认有一个安全问题,攻击者可能会利用此问题曲解用户所不知道的系统操作或行为。</DIV></TD>
                                <TD><DIV class=price>免费</DIV>
                                  <DIV class=info> 发行日期: 2011/2/7</DIV></TD>
                              </TR>
                              <TR>
2 进入相关页面,
找到<A class=download
      
      href="http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=5717"
      bi:track="false" bi:displaylang="zh-cn"
      bi:fileurl="http://download.microsoft.com/download/4/4/7/4475536D-1157-48A4-BBFC-12DF75BB8DAA/Windows6.1-KB2425227-x86.msu"><SPAN>下载</SPAN></A>

http://download.microsoft.com/download/4/4/7/4475536D-1157-48A4-BBFC-12DF75BB8DAA/Windows6.1-KB2425227-x86.msu  这就是下载链接
3 调用迅雷或ie下载

这个应该会用到正则吧?我刚看了一遍30分钟入门,还一头雾水,问题描述不太清楚.....希望有人能帮一下,谢谢。
发表于 2012-8-26 22:31:00 | 显示全部楼层
InetGet ( "http://www.microsoft.com/zh-cn/download/search.aspx?q=KB2425227", @TempDir&"/winxyz", 1)
$file = FileOpen(@TempDir&"/winxyz", 16)
$fullpage = FileRead($file)
FileClose($file)
FileDelete($file)

$id = StringRegExp ( BinaryToString($fullpage, 4), '<div class="link"><a href="/zh-cn/download/details\.aspx\?id=(\d*?)"' , 3 )

For $i = 0 To UBound($id)-1
        MsgBox(64, "url"&$i, "http://www.microsoft.com/zh-cn/download/details.aspx?id="&$id[$i])
Next
 楼主| 发表于 2012-8-27 19:55:01 | 显示全部楼层
回复 2# ajian55
谢谢,这个很好用。但是我还有几个问题....
1 为什么这样就提取不到?
多加一点
$id = StringRegExp ( BinaryToString($fullpage, 4), '<div class="link"><a href="www\.microsoft\.com/zh-cn/download/details\.aspx\?id=(\d*?)"' , 3 )
删掉一点
$id = StringRegExp ( BinaryToString($fullpage, 4), '<div class="link"><a href="/download/details\.aspx\?id=(\d*?)"' , 3 )
都不行

2 stringregexp返回的是什么,是括号里的么?

3如果我想提取
<DIV class=link><A 
href="http://www.microsoft.com/zh-cn/download/details.aspx?id=5717" 
bi:index="0" bi:title="item">Windows 7 安全更新程序 (<B>KB2425227</B>)</A></DIV>
div标签里的所有内容,这样为什么没返回值(是不是正则就写错了?)
$div = StringRegExp ( BinaryToString($fullpage, 4),'<div class="link">(.*?)</div>', 3 )
谢谢。
发表于 2012-8-27 21:43:37 | 显示全部楼层
不懂帮你顶
 楼主| 发表于 2012-8-29 14:12:53 | 显示全部楼层
谢谢,这个问题解决了
#Include <Array.au3>
InetGet ( "http://www.microsoft.com/zh-cn/download/search.aspx?q=KB2425227", @TempDir&"/winxyz", 1)
$file = FileOpen(@TempDir&"/winxyz", 16)
$fullpage = FileRead($file)
FileClose($file)
FileDelete($file)
$id = StringRegExp ( BinaryToString($fullpage, 4), '<div class="link">[\s\S]*?</div>' , 3 )
_ArrayDisplay($id)
这样就可以提取出class 是 link标签中的内容 然后再看里面有没有 x64 emmabed这类词,就可以把补丁分类,然后下一个界面就简单多了。
关键是[\s\S]可以匹配所有字符!!!

然后下面是我解决了的自己的问题
1 返回值是什么,如果没有小括号,返回的就是找到的全部内容,储存在数组里(似乎可以自己指定,我不会...)
比如上一个返回的就是<div class="link"><a href="/zh-cn/download/details.aspx?id=5717" bi:index="0" bi:title="item">Windows 7 安全更新程序 (<b>KB2425227</b>)</a></div>

如果加了小括号$id = StringRegExp ( BinaryToString($fullpage, 4), '<div class="link">([\s\S]*?)</div>' , 3 )
返回的就是<a href="/zh-cn/download/details.aspx?id=5717" bi:index="0" bi:title="item">Windows 7 安全更新程序 (<b>KB2425227</b>)</a>

感谢论坛里的正则学习笔记....谢谢!
发表于 2012-10-12 05:43:23 | 显示全部楼层
楼主程序做出来共享一下嘛
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-18 15:35 , Processed in 0.076146 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表