本帖最后由 komaau3 于 2011-11-3 23:54 编辑
麻烦大家可以测试以下两段代码
第一段
#include <IE.au3>
$oIE=_IECreate("http://reg.163.com/reg/reg2.jsp?",1)
$oImg = _IEGetObjById ($oIE, "random_img");根据ID找到图片对象
MsgBox(0,0,ObjName($oImg))
$oPic = $oIE.Document.body.createControlRange()
$oPic.Add($oImg)
$oPic.execCommand("Copy")
$file = ClipGet()
MsgBox(0,0,$file)
测试环境 windows7+IE9 ,结果ObjName说明是disphtmlimg,是一个网页图片对象,$oPic.Add($oImg)出错,导致以下代码失效
测试环境 windows7+IE8 ,结果ObjName说明是disphtmlimg,是一个网页图片对象,$oPic.Add($oImg)未出错,ClipGet()得到图片缓存路径
测试环境 XP或03+IE8或6 ,结果ObjName说明是disphtmlimg,是一个网页图片对象,$oPic.Add($oImg)未出错,ClipGet()得到空
再看第二段代码,注意IE地址
#include <IE.au3>
$oIE=_IECreate("http://www.baidu.com",1)
$oImg = _IEImgGetCollection ($oIE, 0);//根据获取索引找到图片对象(第一张)
MsgBox(0,0,ObjName($oImg))
$oPic = $oIE.Document.body.createControlRange()
$oPic.Add($oImg)
$oPic.execCommand("Copy")
$file = ClipGet()
MsgBox(0,0,$file)
测试环境 windows7+IE9 ,结果ObjName说明是disphtmlimg,是一个网页图片对象,$oPic.Add($oImg)未出错,ClipGet()得到图片缓存路径
测试环境 windows7+IE8 ,结果ObjName说明是disphtmlimg,是一个网页图片对象,$oPic.Add($oImg)未出错,ClipGet()得到图片缓存路径
测试环境 XP或03+IE8或6 ,结果ObjName说明是disphtmlimg,是一个网页图片对象,$oPic.Add($oImg)未出错,ClipGet()得到空
从以上测试可以看出:
1、无论是_IEGetObjById获取的对象或_IEImgGetCollection指定索引后获得的对象都是相同的(disphtmlimg),因此导致$oPic.Add($oImg)出错的原因可以排除添加对象类型不正确
2、IE9与IE8或IE6的区别,IE8或6无论在什么系统下$oPic.Add($oImg)都不会出错,而IE9却报错,因此排除系统版本的问题
3、我们放入剪切板的同为图片对象,但ClipGet()的结果却不同,因此window7和XP或2003系统的剪切板存在差异,无疑window7的要智能些
疑问:
1注意两段代码中的网址,区别在于www和reg开头,用专业术语我也不知道这叫什么差别,总之IE9下www开头的网址运行代码都不会出错,而非www的(目前只测试了reg开头的)却报错,为什么呢,可是IE9有什么特殊的缓存机制?遍历缓存并没有发现验证码图片,那么验证码是存在什么数据里呢,IE8或6没测试,希望有心人测试下!
2、数据放入剪切板,window7下直接ClipGet()就可以获取路径,但Xp或03下怎么取出具体文件呢?
3、除了以上代码可以从已打开网页提取图片,还有其他办法吗?
求高手解答 ,非常感激 !!!! |