找回密码
 加入
搜索
查看: 7130|回复: 16

[AU3基础] (已解决)《afan大哥再次帮忙》读取网页源代码中的随机数,判断后自动下载保存?

 火.. [复制链接]
发表于 2010-4-8 23:54:38 | 显示全部楼层 |阅读模式
本帖最后由 feicuiboy 于 2010-4-16 07:24 编辑

网页部分代码如下:
   
   search.jsp?id=15d456&door=4A123456&uf8=true  (door=的后面为随机数)
   search.jsp?id=15d456&door=4A456789?&uf8=true  (door=的后面为随机数)
   search.jsp?id=15d456&read=4A658458&uf8=true   (read=的后面为随机数)
   
现在想做的是
  若存在door= 这个字符串,则对比door后面的数字 123456和456789哪个大,哪个数大就自动访问哪个链接(这里456789比123456大,所以访问 search.jsp?id=15d456&door=4A456789?&uf8=true ),并获取这个网页的源代码。
   若不存在door= 字符串,则访问 search.jsp?id=15d456&read=4A658458&uf8=true,并获取其源代码。


最困惑我的

第一个:是door=4A123456的随机数如何逐个获取?

第二个:是知道了下载地址,比如http://abc.com/258.exe,如何自动保存(文件名和原文件名一样,也是258.exe)


请高手指点,谢谢

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-4-9 00:30:05 | 显示全部楼层
LZ想批量下载论坛文章或附件,鉴定完毕。
可以试试搜索 Teleport Pro ……
发表于 2010-4-9 00:38:49 | 显示全部楼层
回复 2# afan
呵呵,Afan版主啥都懂啊,佩服!那个中文名应该叫做网站整站下载器吧,用过还不错。。
 楼主| 发表于 2010-4-9 00:40:08 | 显示全部楼层
回复 2# afan

我知道Teleport Pro是下载网页的,
由于我的工作是每天需要从内网更新一些资料,而那个网站需要多次的跳转,
也就是一个软件有几个版本,我需要多次点击才能下载到最新的,我想直接输入一个资料名称,即可自动下载保存,这样可提高工作效率,期盼高手指点一下
发表于 2010-4-9 00:57:56 | 显示全部楼层
本帖最后由 afan 于 2010-4-9 01:08 编辑
$Str = _
                'search.jsp?id=15d456&door=4A123456&uf8=true' & @CRLF & _
                'search.jsp?id=15d456&door=4A456789?&uf8=true' & @CRLF & _
                'search.jsp?id=15d456&read=4A658458&uf8=true '
MsgBox(0, '源码', $Str)
$sR = StringRegExp($Str, '(.+door=.+?(\d+)[^\d].+)', 3)
Dim $zMax = 0, $lj = ''
For $i = 1 To UBound($sR) - 1 Step 2
        If Number($sR[$i]) > $zMax Then Local $zMax = $sR[$i], $lj = $sR[$i - 1]
Next
MsgBox(0, $zMax, $lj)
;
下载就简单了
InetGet('http://abc.com/258.exe')
 楼主| 发表于 2010-4-9 01:21:12 | 显示全部楼层
 
$Str = _
                'search.jsp?id=15d456&door=4A123456&uf8=true' & @CRLF & _
                'search.jsp?id=15d456&door=4A456789?&uf8=true' & @CRLF & _
                'search.jsp?id=15d456&read=4A658458&uf8=true '
MsgBox(0, '源码', $Str)
$sR = StringRegExp($Str, '(.+door=.+?(\d+)[^\d].+)', 3)
Dim $zMax = 0, $lj = ''
For $i = 1 To UBound($sR) - 1 Step 2
        If Number($sR[$i]) > $zMax Then Local $zMax = $sR[$i], $lj = $sR[$i - 1]
Next
MsgBox(0, $zMax, $lj)

afan大哥,还有些不明白。
其中的$sR = StringRegExp($Str, '(.+door=.+?(\d+)[^\d].+)', 3)这句正则是什么意思啊?另外$sR = StringRegExp($Str, '(.+door=.+?(\d+)[^\d].+)', 3)中返回值是“返回全局匹配的数组”,for循环为什么步数为2?
发表于 2010-4-9 01:37:29 | 显示全部楼层
正则的注释…… 麻烦就一个字

(.+door=.+?(\d+)[^\d].+)  有效的大组里面嵌套了一个有效的小组,这就将输出一组整行字符串和一组其中的数字字符串。\d代表一个数字。+号代表前面的东东有1个以上,所谓贪婪模式。?号前面如果是+或*则是懒惰模式,匹配尽可能少的字符。
一言难尽……
http://deerchao.net/tutorials/regex/regex.htm

step 2 是因为输出的数组元素是 [0]整行、[1]数字、[2]整行、[3]数字……这样递增的,比大小只要数字,所以步进为2
发表于 2010-4-9 09:43:29 | 显示全部楼层
张宇说过,一言难尽……忍不住伤心....
 楼主| 发表于 2010-4-9 16:30:54 | 显示全部楼层
本帖最后由 feicuiboy 于 2010-4-9 16:33 编辑

最近在思考做一个自动下载最新版本软件的方法,由于我的内网上某一软件多次更新,有多个版本,输入软件名后有多个下载链接,最新的软件epm.EPMDocument后面跟的数字会比较大,需要下载最新版本来使用

我的思路是获取网页源代码内的所有地址,然后对比epm.EPMDocument后面跟的最大的数字,获取该数字对应的链接,然后用InetGet下载。现在需到的问题是正则表达式。自己昨天看了下,还是没能很明白


源代码如下:
=========================源代码开始=====================================
title="显示 K 文档详细信息页面" alt="显示 K 文档详细信息页面"/></a></TD><TD></TD></TR>
</TABLE></td><td><a href="javascript:openForeignWindow('netmarkets/jsp/object/more.jsp?oid=VR%3Awt.epm.EPMDocument%3A12345678&u8=1','$DCA$_POPUP_OPTION,width=350,height=475,

若干其他代码

title="显示 K 文档详细信息页面" alt="显示 K 文档详细信息页面"/></a></TD><TD></TD></TR>
</TABLE></td><td><a href="javascript:openForeignWindow('netmarkets/jsp/object/more.jsp?oid=VR%3Awt.epm.EPMDocument%3A45678912&u8=1','$DCA$_POPUP_OPTION,width=350,height=475,

若干其他代码

title="显示 K 文档详细信息页面" alt="显示 K 文档详细信息页面"/></a></TD><TD></TD></TR>
</TABLE></td><td><a href="javascript:openForeignWindow('netmarkets/jsp/object/more.jsp?oid=VR%3Awt.epm.EPMDocument%3A55555555&u8=1','$DCA$_POPUP_OPTION,width=350,height=475,

==========================源代码结束================================


也就是很有规律的,在,'$DCA$_POPUP_OPTION,width=350,height=475,
前面的就是所要的链接地址《/jsp/object/more.jsp?oid=VR%3Awt.epm.EPMDocument%3A45678912&u8=1'》,这个地址可能是1个,也可能是15个,看了下正则表达式语法,自己写了一个,但是测试无法读取的。

问题是:如何去读取这些散步在源代码中的地址,提取最大数者对应的链接。希望afan大哥再次帮忙,
发表于 2010-4-9 18:17:03 | 显示全部楼层
回复 9# feicuiboy
#include <Array.au3>
$Str = _
                'title="显示 K 文档详细信息页面" alt="显示 K 文档详细信息页面"/></a></TD><TD></TD></TR>' & @CRLF & _
                '</TABLE></td><td><a href="javascript:openForeignWindow(' & "'" & 'netmarkets/jsp/object/more.jsp?oid=VR%3Awt.epm.EPMDocument%3A12345678&u8=1' & "'" & ',' & "'" & '$DCA$_POPUP_OPTION,width=350,height=475,' & @CRLF & _
                '' & @CRLF & _
                '若干其他代码' & @CRLF & _
                '' & @CRLF & _
                'title="显示 K 文档详细信息页面" alt="显示 K 文档详细信息页面"/></a></TD><TD></TD></TR>' & @CRLF & _
                '</TABLE></td><td><a href="javascript:openForeignWindow(' & "'" & 'netmarkets/jsp/object/more.jsp?oid=VR%3Awt.epm.EPMDocument%3A45678912&u8=1' & "'" & ',' & "'" & '$DCA$_POPUP_OPTION,width=350,height=475,' & @CRLF & _
                '' & @CRLF & _
                '若干其他代码' & @CRLF & _
                '' & @CRLF & _
                'title="显示 K 文档详细信息页面" alt="显示 K 文档详细信息页面"/></a></TD><TD></TD></TR>' & @CRLF & _
                '</TABLE></td><td><a href="javascript:openForeignWindow(' & "'" & 'netmarkets/jsp/object/more.jsp?oid=VR%3Awt.epm.EPMDocument%3A55555555&u8=1' & "'" & ',' & "'" & '$DCA$_POPUP_OPTION,width=350,height=475,'

;Msgbox(0, 0, $str)
$sR = StringRegExp($Str, "netmarkets(.+)','\$DCA\$_POPUP_OPTION", 3)
_ArrayDisplay($sR, '')
 楼主| 发表于 2010-4-9 23:33:59 | 显示全部楼层
回复 5# afan



对$sR = StringRegExp($Str, '(.+door=.+?(\d+)[^\d].+)', 3) 的解释,

对正则表达式理解:
'(.+door=.+?(\d+)[^\d].+)'-------------------------------由以下部分组成:  一个以上字符串   +door=     一个或以上尽可能少的字符串   一个以上的数字  一个以上非数字的字符串  组成

对$sR = StringRegExp($Str, '(.+door=.+?(\d+)[^\d].+)', 3)的结果: 描述为返回全局匹配的数组,数组0为匹配之整体字符串,数组1为匹配为搜索到的匹配(这里返回的为什么会是数值,迷惑)
发表于 2010-4-9 23:38:35 | 显示全部楼层
返回的就是 (\d+) 的内容
 楼主| 发表于 2010-4-16 07:22:40 | 显示全部楼层
结贴,谢谢afan..
发表于 2010-4-16 09:37:28 | 显示全部楼层
在几次afan大大的帮助下,我已会使用简单的基本的正则了。。。。。对他我内心是无比的感谢..一切尽在不言中。。。
发表于 2010-4-16 09:44:49 | 显示全部楼层
正则的注释…… 麻烦就一个字

(.+door=.+?(\d+)[^\d].+)  有效的大组里面嵌套了一个有效的小组,这就将输 ...
afan 发表于 2010-4-9 01:37



    好吧,我承认我是来找茬的, "麻烦"貌似是两个字
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-3 17:15 , Processed in 0.080326 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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