Board logo

标题: [原创]批处理实现网页下载(260字节) [打印本页]

作者: electronixtar     时间: 2006-11-1 05:22    标题: [原创]批处理实现网页下载(260字节)

1. 下载得到网页源代码
@echo off
<"%~f0" more +5 >tmp.vbs
cscript //NoLogo /e:vbscript tmp.vbs %1
del tmp.vbs
goto:eof
Set oDOM = WScript.GetObject(WScript.Arguments(0))
do until oDOM.readyState = "complete"
WScript.sleep 200
loop
WScript.echo oDOM.documentElement.outerHTML
2. 下载得到网页文本
@echo off
<"%~f0" more +5 >tmp.vbs
cscript //NoLogo /e:vbscript tmp.vbs %1
del tmp.vbs
goto:eof
Set oDOM = WScript.GetObject(WScript.Arguments(0))
do until oDOM.readyState = "complete"
WScript.sleep 200
loop
WScript.echo oDOM.documentElement.outerText

作者: electronixtar     时间: 2006-11-1 05:26
提示:
1. 该批处理的参数比较严格:网址前必须有 http:// 或 ftp:// ,否则出错。
例如,我保存第二个代码为: iGet.bat,然后我运行
iGet.bat ftp://www.dormforce.net 就可以得到一个FTP的内容,然后结合 for 就可以输出FTP的列表

2. 该批处理会直接把结果输出到屏幕,要保存到文件,请使用 > 或者 >> 重定向

3. 该批处理的好处是不需要任何组件(xmlhttp),能自动处理编码问题,缺点是:如果原网页有弹出广告的话,还是会弹出的。如果要完全后台安静下载,可以用经典的 iGet.vbs http://xxxxxx C:\down.htm
该 iGet.vbs 不能直接得到网页文本
Set xPost = CreateObject("Microsoft.XMLHTTP")
xPost.Open "GET",LCase(WScript.Arguments(0)),0
xPost.Send()
Set sGet = CreateObject("ADODB.Stream")
sGet.Mode = 3
sGet.Type = 1
sGet.Open()
sGet.Write(xPost.responseBody)
sGet.SaveToFile LCase(WScript.Arguments(1)),2
[ Last edited by electronixtar on 2006-11-1 at 05:42 AM ]
作者: vkill     时间: 2006-11-1 05:28
赞啊~~~呵呵~
作者: electronixtar     时间: 2006-11-1 05:30
我倒是有一个想法,像

  Quote:
@echo off
<"%~f0" more +5 >tmp.vbs
cscript //NoLogo /e:vbscript tmp.vbs %1
del tmp.vbs
goto:eof

这样的,每次我都要重复写,干脆联盟成立一个标准的可以拿来引用(include)的批处理头(header),然后每次大家的格式都统一点

如果有高人再写一个批处理的IDE,呵呵,就可以大大的简化批处理的书写了。

[ Last edited by electronixtar on 2006-11-1 at 05:32 AM ]
作者: vkill     时间: 2006-11-1 05:36


  Quote:
Originally posted by electronixtar at 2006-11-1 05:30:
我倒是有一个想法,像

这样的,每次我都要重复写,干脆联盟成立一个标准的可以拿来引用(include)的批处理头(header),然后每次大家的格式都 ...

我在想:
set/p 1= 批处理名字:
set/p 2= 批处理中间内容:
echo .............

只是这样想想,不过最好是出个写的标准 ,那样更容易阅读的,不要一个个写的天书似的,例如开头先写
:: 思路:
:: 原理:
等等
作者: 无奈何     时间: 2006-11-1 06:42
Re electronixtar
可以在“新建”里指定模板文件。
比如将上述内容保存到D:\BAT\template.cmd
然后添加下面的注册表项。
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.cmd\ShellNew]
"FileName"="D:\\BAT\\template.cmd"

作者: electronixtar     时间: 2006-11-9 11:30
无奈何 兄高招啊!学习
作者: ccwan     时间: 2006-11-9 21:26
期待中……
作者: scriptor     时间: 2006-12-22 16:17    标题: zan 一个

不错

不过还是借用了vbs 等其他的方法,能不能只用dos命令的,而且不要ie的
纯粹在dos 的那个黑色界面下,那就更好了。

哈哈。。。
谁能写一个batch啊??
作者: wudixin96     时间: 2007-4-7 00:17
骗人。用vbs的。o(∩_∩)o...哈哈。
不过也学习了。
作者: everest79     时间: 2007-4-7 01:23
est失踪一段时间了哦

以下是我在网上D来的
if lcase(right(wscript.fullname,11))="wscript.exe" then
shell.run("cmd.exe /k echo off&cls&cscript //nologo "&chr(34)&wscript.scriptfullname&chr(34))
wscript.quit
end if

作者: everest79     时间: 2007-4-7 01:39
看到楼主的贴我有点模糊的想法,是否我们一直追求的隐藏运行批处理也可以利用模版VBS来达成
作者: estar     时间: 2007-4-7 05:21
继续失踪
作者: everest79     时间: 2007-4-7 07:12
老实说你是不是马甲
作者: ygrzzz     时间: 2008-9-26 22:54
楼主把vbs代码搬进了批处理文件里,给vbscript脚本换了个外衣~~~
这外衣下面能不能再穿条批处理自己的裤子呢?
就是批处理完成一部分工作
遇到功能薄弱处再借助vbs来辅助一下,2者混编,比如
@echo off
IF  exist tmp.vbs (start notepad&del tmp.vbs&exit) ELSE goto scr
:scr
<"%~f0" more +6 >tmp.vbs
cscript //NoLogo /e:vbscript tmp.vbs %1
goto:eof
Set oDOM = WScript.GetObject(WScript.Arguments(0))
do until oDOM.readyState = "complete"
WScript.sleep 200
loop
WScript.echo oDOM.documentElement.outerText
程序的 实际起效流程是先vbs完成部分任务,接着批处理完成余下的任务
我是新手,不过杂7杂8的代码收集了一大堆有些vbs代码单一功能不错想借助一下,然后利用相对易懂的批处理做一些功能的衍变
这样的思路是不是可行啊
作者: sexfio     时间: 2009-4-17 03:53
怎么运行了什么都没啊,什么弄啊
作者: asnahu     时间: 2009-4-17 05:53
这个和微软的脚本很像,但以AJAX的方式实现,CSS和图片等都丢弃了。不知楼主的怎么样。

微软链接:
http://www.microsoft.com/china/t ... other/scroth16.mspx
作者: freeants001     时间: 2009-4-17 10:05
感谢楼主分享~~~
这里我把把1楼2段代码合并了下。
复制保存为iget.bat
iget   l   www.baidu.com  得到http://www.baidu.com网页中的超链接
iget   s   www.baidu.com  得到http://www.baidu.com网页源文件
iget   t   www.baidu.com  得到http://www.baidu.com网页文本
@echo off
more +5 <"%~f0">$get$.js
cscript /NoLogo $get$.js %1 %2&&del $get$.js
goto:eof
:::::::::::::::::::::::::::::::::::::::::::::::
if(WScript.arguments.length!=2)WScript.quit();
var url=WScript.Arguments(1);
if(!/^http:\/\//i.test(url))url="http://"+url;
if(/^[lst]$/i.test(WScript.Arguments(0))==false)WScript.quit();
oDOM=WScript.GetObject(url);
while(oDOM.readyState!="complete")WScript.sleep(100);
if(WScript.arguments(0).toLowerCase()=='l'){for(i in oDOM.links)WScript.echo(oDOM.links[i]);WScript.quit();}
if(WScript.arguments(0).toLowerCase()=='s'){WScript.echo(oDOM.documentElement.outerHTML);WScript.quit();}
if(WScript.arguments(0).toLowerCase()=='t'){WScript.echo(oDOM.documentElement.outerText);WScript.quit();}

作者: lotus516     时间: 2009-5-31 13:37
我抢了!