« PL/SQL Developer 不支持中文问题解决PMP官网查询成绩点击MYPMP链接无效的解决方法 »

VBS自动访问网页并记录日志

        在做项目的时候,遇到这样一个需求,进行数据切割的时候某些数据不是通过正常的业务状态生成的,而是通过语句插入到数据库中的,而这样程序不会自动通知到其他相关模块,需要去手动刷新一下数据缓存。而局方要求该操作在凌晨5点执行。那这个要么派人早上去手动执行,要么就做一个定时任务,每天早上执行一次。

        我们的刷新缓存是点击一个后台网页上的一个连接,通过研究,发现可以使用VBS脚本写一个访问网页的脚本,再利用WINDOWS的任务计划制定一个定时任务即可。脚本如下:

DIM IE
SET IE= CREATEOBJECT("INTERNETEXPLORER.APPLICATION")
IE.NAVIGATE("
http://www.baidu.com")
IE.VISIBLE=1
'1为显示IE窗口,0为不显示

SET IE = NOTHING

        保存为VBS后缀的文件,双击即可执行访问某网页的功能。然后再设立定时任务即可(方法可以百度)。

        但是局方提出了一个问题,你这刷新缓存如何让白天巡检的人员去检查是否刷新成功?因为我们该业务模块在缓存被刷新时不打印相关日志,所有不能从该软件上查询,所以一方面我向公司研发提了增加打印日志的需求,一方面,我再想能否在这个脚本里做下判断。

        又是经过一段时间的研究验证,重新写了一个脚本,原理为判断打开的网页的标题是否为目标网页的标题,并记录日志,如果标题不对,则记录刷新缓存失败的日志。

脚本如下:

URLNAME1="AAA1"
URL1="
http://www.baidu.com"

Call DeleteCache(URL1,URLNAME1)

'刷新缓存函数
Function  DeleteCache(URL,URLNAME)
DIM IE1
SET IE1= CREATEOBJECT("INTERNETEXPLORER.APPLICATION")
IE1.NAVIGATE(URL)
IE1.VISIBLE=0
'修改此参数,可以让网页是否显示,1,显示;0,不显示
do While ie1.busy Or ie1.readystate <> 4 '判断网页是否完全打开
loop
get_title=IE1.Document.title
biaoti="百度"
'修改此参数预期要显示的IE标题

if  instr(get_title,biaoti) then
 set fs =createobject("scripting.filesystemobject")
 if (fs.fileexists("d:\DeleteCache.log")) then
  set f =fs.opentextfile("d:\DeleteCache.log",8) '需要修改为实际的日志路径
  f.write(chr(13))
  f.write Date & " " & Time & " " & "Delete " & URLNAME & " Cache Success!"
  f.writeline
  f.close
 else
  set f=fs.opentextfile("d:\DeleteCache.log",2, true)
  f.write(chr(13))
  f.write Date & " " & Time & " " & "Delete " & URLNAME & " Cache Success!"
  f.writeline
  f.close
 end if
else
 set fs =createobject("scripting.filesystemobject")
 if (fs.fileexists("d:\DeleteCache.log")) then
  set f =fs.opentextfile("d:\DeleteCache.log",8)
  f.write(chr(13))
  f.write Date & " " & Time & " " & "Delete " & URLNAME & " Cache Failed!"
  f.writeline
  f.close
 else
  set f=fs.opentextfile("d:\DeleteCache.log",2, true)
  f.write(chr(13))
  f.write Date & " " & Time & " " & "Delete " & URLNAME & " Cache Failed!"
  f.writeline
  f.close
 end if
end if
SET IE1 = NOTHING
end function

        在这个过程中,遇到几个问题,一个是记录信息到文档的问题,这个需要判断文件是否存在,是否需要新建。另外一个主要的问题是,IE标题是中文,对中文的比较总是不对,后来发现VBS脚本里获取的的中文字符串等默认不是UTF-8的,而我保存的VBS脚本是UTF-8的,我另存为ANSI或者UNCODE,即可以实现中文字符串的比较,这个问题折腾了我好久。

        好了,以上语句保存为vbs脚本(注意保存格式),双击执行即可,需要根据具体的需求修改相应参数。当然,判断是否成功的方法还有很多,这里也不是完全标准,只希望这个能给人有所参考。

以上内容为徐徐的欢乐世界博主徐徐原创,转载请注明出处,http://www.happyworld.net.cn/view.asp?id=9 谢谢!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。