标题: [技术讨论] 对vbs另存网页源码为txt出错的讨论 [打印本页]
作者: batman 时间: 2011-3-12 23:04 标题: 对vbs另存网页源码为txt出错的讨论
下面是段获取批处理之家主页源码并另存为txt的vbs代码,但不知道为什么成功获取的源码总是不能写入txt(但可以写入剪贴板)?请大家帮忙看下到底问题出在哪里?难道是文本格式的问题?- Dim url, ie
- url = "http:\\www.bathome.net"
- set ie = CreateObject("InternetExplorer.Application")
- ie.navigate url
- while ie.busy :wscript.sleep 1000:wend
- vbstr = ie.document.body.innerHTML
- ie.Document.parentwindow.clipboarddata.setdata "text" , vbstr '这是写入剪贴板
- ie.Quit
- Set ie = Nothing
- Set fso = CreateObject("scripting.filesystemobject")
- Set text = fso.opentextfile("temp.txt" , 1 , true)
- text.Write vbstr '写入txt出错
- text.Close
- Set text = nothing
- Set fso = Nothing
复制代码
[ 本帖最后由 batman 于 2011-3-13 01:24 编辑 ]
作者: asnahu 时间: 2011-3-12 23:18
先创建后打开,可直接写入创建的文件。
作者: batman 时间: 2011-3-12 23:31 标题: 回复 2楼 的帖子
试过了不行的。。。但用另外一个方法解决了,不过前面问题还是没有搞清楚。。。- Set http = createObject("Microsoft.XMLHTTP")
- http.Open "get" , "http://www.bathome.net" , 0
- http.send()
- Set myGet = createObject("ADODB.Stream")
- myGet.Mode = 3
- myGet.Type = 1
- myGet.Open()
- myGet.Write(http.responseBody)
- myGet.SaveToFile "temp.txt" , 2
- myGet.Close
- Set myGet = Nothing
- Set http = Nothing
复制代码
作者: Spring 时间: 2011-3-13 00:54
模式设置错了,1是读取模式,不能写入,可以用2(写入)或者8(追加)。
而且一般网页保存最好用UNICODE模式:- Set text = fso.opentextfile("temp.txt" , 2 , true, -1)
复制代码
作者: batman 时间: 2011-3-13 01:07 标题: 回复 4楼 的帖子
我承认是我搞错了模式(是在复制代码后改错的),我实际上是用("temp.txt" , 2 , ture)写了无数次不成功的(将vbstr变成普通字符是可以正常写入的)。所以,我估计是编码带来的问题吧。。。。
作者: asnahu 时间: 2011-3-13 01:14
改成- URL = "http:\\www.bathome.net"
- Set strIE = CreateObject("InternetExplorer.Application")
- strIE.Visible = False
- strIE.Navigate(URL)
- Do While strIE.ReadyState <> 4
- Loop
- str = strIE.document.body.innerHTML
- strIE.quit
-
- Set FSO = CreateObject("scripting.filesystemobject")
- set strfile = FSO.CreateTextFile("temp.txt",true,true)
- strfile.write str
- Set FSO = Nothing
复制代码
作者: asnahu 时间: 2011-3-13 01:16
网页有些unicode字符,所以需要创建unicode而不是ansi文本。
作者: batman 时间: 2011-3-13 01:21
楼上的厉害,学习了。。。。
同时,可以解释下原理不?
作者: batman 时间: 2011-3-13 01:23 标题: 回复 7楼 的帖子
哦,原来是这样,看来我估计得不错,呵呵,再次感谢。。。
作者: batman 时间: 2011-3-13 02:01
本人三楼的代码和六楼的代码同样实现了将bathome主页的源码存入txt,但三楼代码存入的格式为ansi格式,而六楼存入的格式为unicode格式,从最后保存结果来看,六楼代码存入的源码更完整更准确(当然我们可以把保存的ansi文本另存为unicode格式,但就会出现不可见字符“黑框”),运行下面的代码大家就明白了:- Dim url, num
- url = "http://www.bathome.net"
- Set http = createObject("Microsoft.XMLHTTP")
- http.Open "get" , url , 0
- http.send()
- num = lenb(http.responseBody)
- Set http = Nothing
- Set IE = CreateObject("InternetExplorer.Application")
- IE.Visible = False
- IE.Navigate URL
- Do While IE.ReadyState <> 4
- Loop
- msgbox "ansi编码格式下获取源码总字节数:" & num & vbCrLf& "unicode编码格式下获取源码总字节数:" & Lenb(IE.document.body.innerHTML) & vbcrlf & "ansi比unicode格式少" & Lenb(IE.document.body.innerHTML)-num & "个字符!"
- IE.quit
- Set ie = Nothing
复制代码
作者: powerbat 时间: 2011-4-1 22:48
涉及到网页和http最好的对象当然是XMLHTTP和ADODB.Stream这对兄弟了
XMLHTTP有个方法好像可以获取网页的编码格式,回家查一下MSDN
fso不爽的是不支持UTF-8,还是ADODB.Stream更强大,还能处理二进制文件。
作者: lqxcsj 时间: 2011-10-25 16:50
怎样保存多个网页?
作者: famersoft 时间: 2012-10-25 17:17
今天 也遇到 了同样的问题,找了半天没找出原因,在batman的帮助下才明白过来,学习过!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |