本帖最后由 batman 于 2011-5-9 10:43 编辑
前言:
最近论坛暗暗兴起了一股批处理下载热,jm还就此写出了关于curl下载的相关教程。我认为这确实是件好事,至少由此力证了批处理并不是花拳绣脚,而是有着广泛的实用性。要做到下载,就必须对网页源码进行分析和操作,相对于批处理而言,vbs对此更有着优越性,它针对于对象的操作让此变得很轻松,批处理却只能借助于第三方工具来实现。于是,本人在此之前鼓捣出了四大名著下载vbs版。。。
继四大名著下载后今日再推出批量下载代码。由于代码是采用的ie自带下载,所以采用了sendkey来模拟键盘操作。其实有很多人并不看好sendkey,认为这样的操作太不稳定,本人以前也是这样以为的。但是从下面这段代码,可以看出只要控制好sendkey,它还是大有可为的。。。
代码从网页源码中获取小说名及下载地址,并用vbs调用cmd命令利用ie默认下载,同时对下载的temp.zip重命名并移动到当前目录下。
注:
由于是采用的ie(ie8可能不行)自带下载,所以在运行代码前请先关闭迅雷或其他下载软件的浏览器监视功能,最好关闭杀软的网络监控。同时将代码中的temp路径改为你的ie默认下载路径(本人的是桌面),并将输入法置于英文输入状态。在下载过程可能会因为有些地址无法连接而弹出错误窗口,对于此代码设置了超时等待(初始为30秒,自己可以根据网络情况修改),等待超时会自动进入下一个文件的下载。整个下载过程全是由程序自动完成的,你要做的就是静静坐在电脑前看着一本本小说(zip文件)被下载到电脑中。。。- Dim fso, vbstr, wssh, regstr, temp, XMLHTTP, AdoStrm
- Set fso = CreateObject("scripting.filesystemobject")
- Set wssh = CreateObject("wscript.shell")
- Set XMLHTTP = CreateObject("Microsoft.XMLHTTP")
- set AdoStrm = CreateObject("ADODB.Stream")
- XMLHTTP.Open "GET", "http://www.d9cn.org/modules/article/index.php?fullflag=1", False
- Do Until XMLHTTP.readyState = 1:WScript.Sleep 200:Loop
- XMLHTTP.Send()
- AdoStrm.Mode = 3
- AdoStrm.Type = 1
- AdoStrm.Open()
- AdoStrm.Write XMLHTTP.responseBody
- AdoStrm.SaveToFile wssh.CurrentDirectory & "\temp.htm", 2
- adostrm.Close
- Set XMLHTTP = Nothing
- set AdoStrm = Nothing
- vbstr = fso.OpenTextFile(wssh.CurrentDirectory & "\temp.htm", 1, True).ReadAll()
- fso.DeleteFile wssh.CurrentDirectory & "\temp.htm"
- temp = "C:\Docume~1\Administrator\桌面\temp.zip"
- regtest vbstr, "(<h3>).*?(\w+):\/\/([^/:]+)(/d9info)([^# ]*)?(htm)(.>)?(.*)?(</a>)"
- Set fso = nothing
- Set wssh = Nothing
- MsgBox "ok"
-
- Function regtest(str, pattern)
- Dim regex, matches, match, name, url, i
- Set regex = New RegExp
- regex.Pattern = pattern
- regex.Global = True
- regex.IgnoreCase = False
- Set matches = regex.Execute(str)
- For Each match In matches
- name = match.Submatches(7) & ".zip":i = 0
- url = "http://121.11.149.131:60889/d9cnzip" & match.Submatches(4) & "zip"
- wssh.Run "cmd /c start " & url, 0, True
- WScript.Sleep 500
- wssh.SendKeys "{delete}"
- WScript.Sleep 500
- wssh.SendKeys "{delete}"
- WScript.Sleep 500
- wssh.SendKeys "{delete}"
- WScript.Sleep 500
- wssh.SendKeys "s"
- WScript.Sleep 500
- wssh.SendKeys "temp"
- WScript.Sleep 500
- wssh.SendKeys "{tab}"
- WScript.Sleep 500
- wssh.SendKeys "{tab}"
- WScript.Sleep 500
- wssh.SendKeys "s"
- Do Until fso.FileExists(temp) Or i = 150
- i = i+1
- WScript.Sleep 200
- Loop
- wssh.SendKeys "{enter}"
- If fso.FileExists(temp) Then fso.MoveFile temp, wssh.CurrentDirectory & "\" & name
- WScript.Sleep 500
- Next
- End Function
复制代码
|