最近在写一个网页采集的程序,无奈那个网页写得太烂,里面的标签连ID都没有,用不了getElementById。幸好还有name属性,用getElementsByName就行了。
<input type="text" name="username">
然后就可以使用
getElementsByName("username")(0)
来获取这个对象
最近在写一个网页采集的程序,无奈那个网页写得太烂,里面的标签连ID都没有,用不了getElementById。幸好还有name属性,用getElementsByName就行了。
<input type="text" name="username">
然后就可以使用
getElementsByName("username")(0)
来获取这个对象
我想到的方法有两种。
一种是WMI中的Win32_DesktopMonitor类
strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_DesktopMonitor",,48) For Each objItem in colItems WScript.Echo "ScreenHeight: " & objItem.ScreenHeight WScript.Echo "ScreenWidth: " & objItem.ScreenWidth Next
一种是HTML DOM中的screen对象
Dim IE Set IE = CreateObject("InternetExplorer.Application") IE.Navigate "about:blank" Set screen = IE.Document.parentWindow.screen WScript.Echo "ScreenHeight: " & screen.height WScript.Echo "ScreenWidth: " & screen.width
参考链接
MD5算法的VBS代码在网上可以找到很多,这些代码都是按照“算法”写出来的,所以都很长,更重要的是,找不到SHA1算法的VBS实现。本来打算自己写的,但是看到复杂的算法描述就知难而退了。算了吧,有现成的COM对象调用,又何必去关心算法呢,直接拿来使用就行了。如果下面的例子代码提示无法创建对象,需要下载CAPICOM组件并注册。
Const CAPICOM_HASH_ALGORITHM_MD2 = 1 Const CAPICOM_HASH_ALGORITHM_MD4 = 2 Const CAPICOM_HASH_ALGORITHM_MD5 = 3 Const CAPICOM_HASH_ALGORITHM_SHA1 = 0 Const CAPICOM_HASH_ALGORITHM_SHA_256 = 4 Const CAPICOM_HASH_ALGORITHM_SHA_384 = 5 Const CAPICOM_HASH_ALGORITHM_SHA_512 = 6 'Author: Demon 'Website: https://demon.tw Dim HashedData Set HashedData = CreateObject("CAPICOM.HashedData") HashedData.Algorithm = CAPICOM_HASH_ALGORITHM_SHA1 HashedData.Hash "Demon" WScript.Echo HashedData.Value
需要指出的是VBS的字符串是Unicode编码的,例如上面的字符串"Demon"在内存中的十六进制是4400 6500 6D00 6F00 6E00,这些Hash算法只关心数据的二进制值,不同编码的同一字符串的二进制值是不一样的,这就是算出来的值和PHP中(PHP默认的编码是UTF-8)的sha1("Demon")的值不一样的原因。更多CAPICOM的用法请自行查阅MSDN参考文档。
之前用VBS写UTF-16编码转UTF-8编码的时候要用到移位运算,但是VBS中没有移位运算符,就用简单的乘除运算实现了移位运算函数。而移位运算并不仅仅是简单的乘除而已,这样写可能会有未知的错误。现在知道了MSScriptControl.ScriptControl对象,实现左移位、右移位是如此的简单。
Function LShift(Value, Shift) Set sc = CreateObject("MSScriptControl.ScriptControl") sc.Language = "JScript" LShift = sc.Eval(Value & "<<" & Shift) End Function Function RShift(Value, Shift) Set sc = CreateObject("MSScriptControl.ScriptControl") sc.Language = "JScript" RShift = sc.Eval(Value & ">>" & Shift) End Function
一直想写一个VBS版的六维空间作弊程序,无奈没有找到现成的VBS版Sha1函数,也许是VBS没有位操作符的缘故吧。而JavaScript版的早已实现,然后就想能不能在VBS中执行JavaScript代码,这样就可以变相实现了,当时知道的方法是WSC文件,但是我不喜欢额外的文件,只好作罢。最近偶然发现一个MSScriptControl.ScriptControl对象,可以实现这个功能,简单的示例如下,更高级的用法自己查阅帮助文档。
Dim sc Set sc = CreateObject("MSScriptControl.ScriptControl") sc.Language = "JScript" result = sc.Eval("encodeURIComponent('恶魔');") WScript.Echo result