找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28247|回复: 13

[技术讨论] 对vbs另存网页源码为txt出错的讨论

[复制链接]
发表于 2011-3-12 23:04:37 | 显示全部楼层 |阅读模式
下面是段获取批处理之家主页源码并另存为txt的vbs代码,但不知道为什么成功获取的源码总是不能写入txt(但可以写入剪贴板)?请大家帮忙看下到底问题出在哪里?难道是文本格式的问题?
  1. Dim url, ie
  2. url = "http:\\www.bathome.net"
  3. set ie = CreateObject("InternetExplorer.Application")
  4. ie.navigate url
  5. while ie.busy :wscript.sleep 1000:wend
  6. vbstr = ie.document.body.innerHTML
  7. ie.Document.parentwindow.clipboarddata.setdata "text" , vbstr  '这是写入剪贴板
  8. ie.Quit
  9. Set ie = Nothing
  10. Set fso = CreateObject("scripting.filesystemobject")
  11. Set text = fso.opentextfile("temp.txt" , 1 , true)  
  12. text.Write vbstr  '写入txt出错
  13. text.Close
  14. Set text = nothing
  15. Set fso = Nothing
复制代码

[ 本帖最后由 batman 于 2011-3-13 01:24 编辑 ]
发表于 2011-3-12 23:18:37 | 显示全部楼层
先创建后打开,可直接写入创建的文件。
 楼主| 发表于 2011-3-12 23:31:03 | 显示全部楼层

回复 2楼 的帖子

试过了不行的。。。但用另外一个方法解决了,不过前面问题还是没有搞清楚。。。
  1. Set http = createObject("Microsoft.XMLHTTP")
  2. http.Open "get" , "http://www.bathome.net" , 0
  3. http.send()
  4. Set myGet = createObject("ADODB.Stream")
  5. myGet.Mode = 3
  6. myGet.Type = 1
  7. myGet.Open()
  8. myGet.Write(http.responseBody)
  9. myGet.SaveToFile "temp.txt" , 2
  10. myGet.Close
  11. Set myGet = Nothing
  12. Set http = Nothing
复制代码
发表于 2011-3-13 00:54:56 | 显示全部楼层
模式设置错了,1是读取模式,不能写入,可以用2(写入)或者8(追加)。
而且一般网页保存最好用UNICODE模式:
  1. Set text = fso.opentextfile("temp.txt" , 2 , true, -1)
复制代码
 楼主| 发表于 2011-3-13 01:07:27 | 显示全部楼层

回复 4楼 的帖子

我承认是我搞错了模式(是在复制代码后改错的),我实际上是用("temp.txt" , 2 , ture)写了无数次不成功的(将vbstr变成普通字符是可以正常写入的)。所以,我估计是编码带来的问题吧。。。。
发表于 2011-3-13 01:14:59 | 显示全部楼层
改成
  1. URL = "http:\\www.bathome.net"
  2. Set strIE = CreateObject("InternetExplorer.Application")
  3. strIE.Visible = False
  4. strIE.Navigate(URL)
  5. Do While strIE.ReadyState <> 4
  6. Loop
  7. str = strIE.document.body.innerHTML
  8. strIE.quit

  9. Set FSO = CreateObject("scripting.filesystemobject")
  10. set strfile = FSO.CreateTextFile("temp.txt",true,true)
  11. strfile.write str
  12. Set FSO = Nothing
复制代码

评分

参与人数 1技术 +1 收起 理由
batman + 1 厉害!

查看全部评分

发表于 2011-3-13 01:16:13 | 显示全部楼层
网页有些unicode字符,所以需要创建unicode而不是ansi文本。
 楼主| 发表于 2011-3-13 01:21:03 | 显示全部楼层
楼上的厉害,学习了。。。。

同时,可以解释下原理不?
 楼主| 发表于 2011-3-13 01:23:18 | 显示全部楼层

回复 7楼 的帖子

哦,原来是这样,看来我估计得不错,呵呵,再次感谢。。。
 楼主| 发表于 2011-3-13 02:01:07 | 显示全部楼层
本人三楼的代码和六楼的代码同样实现了将bathome主页的源码存入txt,但三楼代码存入的格式为ansi格式,而六楼存入的格式为unicode格式,从最后保存结果来看,六楼代码存入的源码更完整更准确(当然我们可以把保存的ansi文本另存为unicode格式,但就会出现不可见字符“黑框”),运行下面的代码大家就明白了:
  1. Dim url, num
  2. url = "http://www.bathome.net"
  3. Set http = createObject("Microsoft.XMLHTTP")
  4. http.Open "get" , url , 0
  5. http.send()
  6. num = lenb(http.responseBody)
  7. Set http = Nothing
  8. Set IE = CreateObject("InternetExplorer.Application")
  9. IE.Visible = False
  10. IE.Navigate URL
  11. Do While IE.ReadyState <> 4
  12. Loop
  13. msgbox "ansi编码格式下获取源码总字节数:" & num & vbCrLf& "unicode编码格式下获取源码总字节数:" & Lenb(IE.document.body.innerHTML) & vbcrlf & "ansi比unicode格式少" & Lenb(IE.document.body.innerHTML)-num & "个字符!"
  14. IE.quit
  15. Set ie = Nothing
复制代码
发表于 2011-4-1 22:48:15 | 显示全部楼层
涉及到网页和http最好的对象当然是XMLHTTP和ADODB.Stream这对兄弟了
XMLHTTP有个方法好像可以获取网页的编码格式,回家查一下MSDN

fso不爽的是不支持UTF-8,还是ADODB.Stream更强大,还能处理二进制文件。
发表于 2011-10-25 16:50:14 | 显示全部楼层
怎样保存多个网页?
发表于 2012-10-25 17:17:32 | 显示全部楼层
今天 也遇到 了同样的问题,找了半天没找出原因,在batman的帮助下才明白过来,学习过!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 13:25 , Processed in 0.022072 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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