本帖最后由 ytoking 于 2009-12-23 07:23:10 编辑

解决方案 »

  1.   

    WebBrowser1本身就可以过滤掉图片与音频文件。在web_BeforeNavigate2中获得pDisp参数,然后在TIMER中不停的查找pDisp中的图片节点与音频节点,然后使src="" 或 音频文件="" 这样就过滤掉了图片与音频文件。
    而且还可以通过别的方法得到HTML,不用WebBrowser1,你就找这几天的帖子,有说那个的,好象用什么HTTP之类的。
      

  2.   

    pDisp是一个Object类型,对这个参数不了解怎么使用,在GOOGLE也没什么资料,可以详说怎么表示图片节点吗?
      

  3.   

    最好的办法就是引入MSHTML对象。 VB —— 引用 —— Microsoft HTML Object Library
    其实pDisp对象就是浏览器的一个接口。
    Dim doc1 As IHTMLDocument2在BeforeNavigate2事件,要么是NavigateComplete2事件中写如下代码(记不太清楚了,反正是两个中的一个)
    Set doc1 = pDisp.Document然后定义一个TIMER控件
    不停的执行:
    on error resume next (必须有哦,起初的pDisp是什么都没有的对象,然后一点一点才有东西)Dim elementConnect As IHTMLElementCollection
    dim element as ihtmlelementset element = doc1.all.tags("img") '图片结点或音频结点等。
    for each element in elementConnect
      element.setAttribute "src", ""
    next 以上代码不知道对错,哈哈,但是基本就是这样的。用这个思路保证没问题,也保证能解决你的问题。
    不过看这几天的帖子中好象也有别的办法实现,而且根本不用webbrowser控件,你也可以找找。
      

  4.   

    先谢谢你!
    不过这种思路是当DOM完成了,然后通过DOM修改源码,这能够不显示图片,但我要的是不下载图片。因为这样子才可以减少传输。
    期待。
      

  5.   

    你说的这几天的帖子我也已经看了,不过都要有确定的地址。我在主题了已经说了,我不知道地址。因为那是AJAX动态生成的然后发送到网页上。
      

  6.   

    BeforeNavigate2这个事件应该可以实现,就是不知道里面那些参数是什么意思。
    ByVal pDisp As Object, 
    URL As Variant, 
    Flags As Variant, 
    TargetFrameName As Variant, 
    PostData As Variant, 
    Headers As Variant, 
    Cancel As Boolean
      

  7.   

    你有没有看我给你写的东西啊。
    不过这种思路是当DOM完成了,然后通过DOM修改源码,这能够不显示图片,但我要的是不下载图片。因为这样子才可以减少传输。 
    我就在我写的里面告诉你了用BeforeNavigate2事件了么,你仔细看看行不?如果你说的DOM加载完成,那就不是用beforeNavigate2事件了,那就用DocumnetComplete事件了。我说的很清楚了,用的是beforeNavigate2。
    你再仔细看看我上面的回答。怎么解释pDisp的。cancel是代表是否加载此连接,如果你的网页中有很多FRAME,那么可以用if url="frame网址" then cancel=true屏蔽掉。
      

  8.   

    我看到啊,所以才会补充说:BeforeNavigate2这个事件可以实现,可是怎么确定那是IMG标签呢?
      

  9.   

    doc1.all.tags("img")这不就确定IMG标签了么。
      

  10.   

    再测试了,发现下图片时没有触发BeforeNavigate2事件,不知道还有什么方法不?
      

  11.   

    Private Sub Command1_Click()
    WebBrowser1.navigate "http://www.google.com"
    End Sub
    Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)Print URL
    Print "fffffff"
    End Sub
    只显示了一次,而google里面有几个图片,如果每次下图片时都会触发,那么应该会显示几次才是的。
      

  12.   

    谁有MSHTML.dll文件的帮助文档?请发我一份[email protected]
    对这个Microsoft HTML Object Library 很陌生
      

  13.   

    beforenavigate事件不是图片下载是触发,而是文档加载前触发。比如登陆www.baidu.com,那么在下载百度网页全代码前就产生beforenavigate事件,而且没个网址只触发一次(Frame里面的网址也算)。把pDisp接口留给我们。
    beforenavigate事件中的PDISP参数会不停的增大,因为它不停的加载原代码。(在触发beforenavigate事件时,把pDisp参数给外面,让一个Timer不停的执行,你会发现pDisp在不停的增加东西。)网页是先下代码,然后加载实际的图片,音频等。所以你在beforenavigate事件里,把pDisp的图片,音频等下载的网址全部弄没,那么以后就不会加载这些图片与音频了。