VBscript导航URL但不加载图像?

时间:2014-10-26 05:02:40

标签: vbscript

我使用

成功浏览网页
Set oShell = CreateObject("WScript.Shell") 
strHomeFolder = oShell.ExpandEnvironmentStrings("%APPDATA%")  
Set objExplorer = WScript.CreateObject _ 
("InternetExplorer.Application", "IE_") 
objExplorer.Navigate  "http://www.example.org" 
objExplorer.Visible = 1 

但我想加载网页而不在网页上加载图片(例如:删除所有img标签)。这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:4)

您可以通过操作DOM树来加载页面后删除图像:

...

'wait for IE to finish loading the page
While objExplorer.ReadyState <> 4 : WScript.Sleep 100 : Wend

'remove <img> elements fromt the page
For Each img In objExplorer.document.getElementsByTagName("img")
  img.parentNode.removeChild(img)
Next

如果您想避免完全加载图像,则必须禁用“Internet选项”中的“显示图片”设置。

Setting "Show Pictures" in the Advanced Internet Options

此设置也可以在注册表中更改(在启动Internet Explorer之前),如下所示:

Set sh = CreateObject("WScript.Shell")

regval = "HKCU\Software\Microsoft\Internet Explorer\Main\Display Inline Images"
sh.RegWrite regval, "no", "REG_SZ"

Set ie = CreateObject("InternetExplorer.Application")
...

正如@Matt在您的问题的评论中建议的那样,您也可以只检索HTML页面:

url = "http://www.example.org"

Set req = CreateObject("Msxml2.XMLHTTP.6.0")
req.open "GET", url, False
req.send

html = req.responseText

删除<img>代码(或者更确切地说是src属性的值):

Set re = New RegExp
re.Pattern = "(<img[^>]*src=[""']).*?([""'][^>]*>)"
re.Global  = True
re.IgnoreCase = True

html = re.Replace(html, "$1$2")

将其保存到本地文件:

filename = "C:\temp.html"

Set fso = CreateObject("Scripting.FileSystemObject")

fso.OpenTextFile(filename, 2, True).Write html

然后在IE中加载该本地文件:

Set ie = CreateObject("InternetExplorer.Application")

ie.Navigate "file://" & filename
While ie.ReadyState <> 4 : WScript.Sleep 100 : Wend
ie.Visible = True

这种方法的缺点是相对链接和对原始网站资源的其他引用(样式表,JavaScript库......)将不再起作用,因为您从不同的上下文加载页面,这些资源不在不存在。当然,除非您通过在基本URL之前添加相对路径将它们转换为绝对引用来使它们再次工作。如果你想覆盖所有基础,这可能是相当多的工作。