|
楼主 |
发表于 2014-10-21 13:19
|
显示全部楼层
本帖最后由 wcymiss 于 2014-11-1 16:44 编辑
常用代码及自定义函数:
1、网抓主体代码:- Sub Main()
- Dim strText As String
- With CreateObject("MSXML2.XMLHTTP") 'CreateObject("WinHttp.WinHttpRequest.5.1")'
- .Open "POST", "", False
- .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
- .setRequestHeader "Referer", ""
- .Send
- strText = .responsetext
- Debug.Print strText
- End With
- End Sub
复制代码 代码里的很多""就是留给你的填空题。。。
xmlhttp/winhttp对象的属性和方法可以网上百度学习(不学也暂时影响不大),内容不多。
2、Javascript表达式求值:- Function JSEval(strText As String) As String
- With CreateObject("MSScriptControl.ScriptControl")
- .Language = "javascript"
- JSEval = .Eval(strText)
- End With
- End Function
复制代码 3、url转码:- Function encodeURI(strText As String) As String
- With CreateObject("msscriptcontrol.scriptcontrol")
- .Language = "JavaScript"
- encodeURI = .Eval("encodeURIComponent('" & strText & "');")
- End With
- End Function
复制代码 javascript提供了六个转码函数:
escape,unescape,encodeURI,encodeURIComponent,decodeURI,decodeURIComponent
具体用法请百度。我只能说我最常用的是encodeURIComponent。
4、流数据转成指定编码的文本:- Function ByteToStr(arrByte, strCharset As String) As String
- With CreateObject("Adodb.Stream")
- .Type = 1 'adTypeBinary
- .Open
- .Write arrByte
- .Position = 0
- .Type = 2 'adTypeText
- .Charset = strCharset
- ByteToStr = .Readtext
- .Close
- End With
- End Function
复制代码 5、文本按指定编码转为流数据:- Function StrToByte(strText As String, strCharset As String)
- With CreateObject("adodb.stream")
- .Mode = 3 'adModeReadWrite
- .Type = 2 'adTypeText
- .Charset = strCharset
- .Open
- .Writetext strText
- .Position = 0
- .Type = 1 'adTypeBinary
- '.Position = 2 '保留BOM头则不需此行代码,去除三个字节的BOM头就填入3,去除两个字节的就填入2
- StrToByte = .Read
- .Close
- End With
- End Function
复制代码 注:某些文本转为流后,前面会添加几个字节的BOM头,用来被某些软件识别是什么编码。如UTF-8编码的前面有三个字节的BOM头,Unicode前面有两个字节的BOM头。大家可以视情况选择保留或去除这些BOM头。
6、二进制流转成文件:- Sub ByteToFile(arrByte, strFileName As String)
- With CreateObject("Adodb.Stream")
- .Type = 1 'adTypeBinary
- .Open
- .Write arrByte
- .SaveToFile strFileName, 2 'adSaveCreateOverWrite
- .Close
- End With
- End Sub
复制代码 7、文本拷贝到剪贴板:- Sub CopyToClipbox(strText As String)
- '文本拷贝到剪贴板
- With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
- .SetText strText
- .PutInClipboard
- End With
- End Sub
复制代码 先上这些,以后觉得有必要再添加
呃,原谅我吧,我是个怀旧的人。我的机器的配置目前为止仍旧是32位的winXP+2003office,IE也刚升级到IE8,之前一直用的IE6。弦月大师(xmyjk)所点评的内容我没有办法提供呀。。甩泪。。。
=================================================
突然想起HtmlWindow也可以直接执行Javascript函数得出值。
用64位office的朋友可以测试一下下面的代码能不能通过:
替代上面自定义函数2的:- Function EvalByHtml(strText As String) As String
- With CreateObject("htmlfile")
- .write "<html><script></script></html>"
- EvalByHtml = CallByName(.parentwindow, "eval", VbMethod, strText)
- End With
- End Function
复制代码 替代上面自定义函数3的:- Function encodeURIByHtml(strText As String) As String
- With CreateObject("htmlfile")
- .write "<html><script></script></html>"
- encodeURIByHtml = CallByName(.parentwindow, "encodeURIComponent", VbMethod, strText)
- End With
- End Function
复制代码 给Dom添加一个空的script就可以直接执行js函数了,非常好用。
为防止vba自动篡改大小写,把js函数名作为文本放在callbyname的参数里。 |
评分
-
7
查看全部评分
-
|