两个与WebBrowser有关的问题

时间:2022-07-29 06:17:52
1、我想用Inet控件获取某网页的HTML代码然后用"WebBrowser1.Document.Write sHTML"的方法写入WebBrowser控件中,但是由于取得的代码中大部分路径都是相对路径,用以上方法无法达到直接用"WebBrowser1.Navigate 网址"的效果,能否给WebBrowser控件设置一个"当前路径"?除了分析字符串把所有相对路径改成绝对路径外还有什么其他方法可以解决这个问题?

2、在WebBrowser中点击一个类似这样的链接:
<a href="http://www.baidu.com" target="_blank">百度</a>
如何得到点击的链接地址是"http://www.baidu.com"?

16 个解决方案

#1


哈哈~~海哥!!还记得我吗??非常感谢你上次给我解答的问题...
现在我的大部分问题终于都解决了....真的非常感谢你,很想和你交个朋友.
上次加你Q没通过,这次你加我Q好吗?MY QQ:30747751

好啦!!正题,先回答你的问题...
你的第一个问题我没看懂.先解决你第二个问题吧...不过我这方法估计也能解决你的第一个问题,因为无论什么控件返回的都是DHTML代码...下面的代码都能通过.你先试试.
以下我是用一个网页的代码来举列代码的,所以用到循环与判断,你根据自己的情况自己修改吧:
for i = 0 To WebBrowser.document.all.length - 1
      if ucase(WebBrowser.document.All(i).tagName)="a" then
            if WebBrowser.Document.All(i).href = "http://www.baidu.com" Then
                  Exit For
            end if
      end if
next

说明一下:
i是该页面所在标签的位置,如果你要得到第5个<里面的就直接写5.
如果你想得到href的值就直接变量变=WebBrowser.Document.All(i).href就行了!!

#2


好几天没上QQ了,已加你。

谢谢你的关注和回答,不过第2个问题遍历所有链接没什么意义,因为我现在连点击链接这个动作都捕捉不到...-_-!!!
因为这个链接的target是新窗口,所以点击这个链接后只会发生newwindow2事件而不发生beforenavegate2事件,而newwindow2这个事件中并不提供点击的这个链接的任何信息。我曾试着把这个webbrowser控件的document定义为一个HTMLDocument,但是链接的拖动会触发HTMLDocument的ondragstart事件,链接的点击却不会触发HTMLDocument的onclick事件!

继续请教!

#3


顶起来

#4


帮顶  判断 url不行吗

#5


谢谢帮顶,就是想判断url,但问题就是怎么得到点击的这个url啊

#6


加分了啦!

#7


还是不太明白你想怎样!!
在Q上详聊吧!~~~~

#8


Beforenavigate2事件
  
*****************************************************************************
欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码) 
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html

#9


to 楼上:
因为这个链接的target是_blank,所以点击这个链接后只会发生newwindow2事件而不发生beforenavegate2事件

#10


Inet控件获取某网页的HTML代码, 用百度贴吧http://post.baidu.com试了一下好像不行
============================

Option Explicit

Private mbInitialize As Boolean

Private WithEvents moDocument As HTMLDocument

Private Sub Form_Load()
    mbInitialize = False
    WebBrowser1.Navigate "about:blank"
End Sub

Private Function moDocument_onclick() As Boolean
    '键盘事件类此处理
    If moDocument.elementFromPoint(moDocument.parentWindow.event.x, moDocument.parentWindow.event.y).tagName = "A" Then
        Text1.Text = moDocument.elementFromPoint(moDocument.parentWindow.event.x, moDocument.parentWindow.event.y).href
        moDocument_onclick = False
    Else
        moDocument_onclick = True
        Text1.Text = ""
    End If
End Function

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    If mbInitialize = False Then
        mbInitialize = True
        Set moDocument = WebBrowser1.Document
        moDocument.body.innerHTML = "<a href=""http://www.baidu.com"" target=""_blank"">百度</a>"
    Else
        
    End If
End Sub

============================
你的工分可不大好挣啊, 接分, 哈哈

#11


to Hassle():
  我的第2个问题已经被你给解决了,感谢,同时50分已经记在你的名上了,等另一个问题解决后一起结贴(最多3天后解决不了也会结贴)。
  第1个问题应该也不很难,毕竟WebBrowser和Inet控件是共用同一个Session的。

#12


自己再顶一下,希望有人可以帮我解决第1个问题。。。

#13


关于第2个问题 我是用 hook做的 很好用  点哪里得到那里的任何东西  
是帮别人做的一个小项目 收费的

第一个问题不太好弄 除非晓得webbrowns的内部规则 直接去修改它的内存去改写相对网页路径好了

#14


第一个问题不管它了,在jiangsheng老大的blog上受到启发,已经搞得差不多了。
但是第二个问题又出现了一点小的波折:我这个链接是在web_documentcomplete事件中改写了某个tag的innerhtml后添加上去的,比如有个<td>本来的innerhtml是"<td>内容</td>",我给它改成"<td>内容</td><a href=http://www.xxx.com target=_blank>test</a>",然后我"set objDoc=web.document",但是当点击这个新加上去的链接的时候,竟然不会触发objDoc_onclick事件,好像是objDoc还不承认这个新链接是自己的一部分,这又该怎么办呢?

#15


下班前再顶一下,晚上来看看有没有惊喜发生。。。

#16


WebBrowser1.Navigate "http://www.baidu.com"

WebBrowser1.Document.write "<html><body><table><tr><td>Test</td><a href=""http://www.google.com.cn"" target=""_blank"">百度</a></tr><table></body></html>"

Set moDocument = WebBrowser1.Document

我这样试了一下(XP和W2K),没有问题,不过"百度"跑到"Test"上面,这是浏览器解释的问题,与楼主的问题关系不大
    


#1


哈哈~~海哥!!还记得我吗??非常感谢你上次给我解答的问题...
现在我的大部分问题终于都解决了....真的非常感谢你,很想和你交个朋友.
上次加你Q没通过,这次你加我Q好吗?MY QQ:30747751

好啦!!正题,先回答你的问题...
你的第一个问题我没看懂.先解决你第二个问题吧...不过我这方法估计也能解决你的第一个问题,因为无论什么控件返回的都是DHTML代码...下面的代码都能通过.你先试试.
以下我是用一个网页的代码来举列代码的,所以用到循环与判断,你根据自己的情况自己修改吧:
for i = 0 To WebBrowser.document.all.length - 1
      if ucase(WebBrowser.document.All(i).tagName)="a" then
            if WebBrowser.Document.All(i).href = "http://www.baidu.com" Then
                  Exit For
            end if
      end if
next

说明一下:
i是该页面所在标签的位置,如果你要得到第5个<里面的就直接写5.
如果你想得到href的值就直接变量变=WebBrowser.Document.All(i).href就行了!!

#2


好几天没上QQ了,已加你。

谢谢你的关注和回答,不过第2个问题遍历所有链接没什么意义,因为我现在连点击链接这个动作都捕捉不到...-_-!!!
因为这个链接的target是新窗口,所以点击这个链接后只会发生newwindow2事件而不发生beforenavegate2事件,而newwindow2这个事件中并不提供点击的这个链接的任何信息。我曾试着把这个webbrowser控件的document定义为一个HTMLDocument,但是链接的拖动会触发HTMLDocument的ondragstart事件,链接的点击却不会触发HTMLDocument的onclick事件!

继续请教!

#3


顶起来

#4


帮顶  判断 url不行吗

#5


谢谢帮顶,就是想判断url,但问题就是怎么得到点击的这个url啊

#6


加分了啦!

#7


还是不太明白你想怎样!!
在Q上详聊吧!~~~~

#8


Beforenavigate2事件
  
*****************************************************************************
欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码) 
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html

#9


to 楼上:
因为这个链接的target是_blank,所以点击这个链接后只会发生newwindow2事件而不发生beforenavegate2事件

#10


Inet控件获取某网页的HTML代码, 用百度贴吧http://post.baidu.com试了一下好像不行
============================

Option Explicit

Private mbInitialize As Boolean

Private WithEvents moDocument As HTMLDocument

Private Sub Form_Load()
    mbInitialize = False
    WebBrowser1.Navigate "about:blank"
End Sub

Private Function moDocument_onclick() As Boolean
    '键盘事件类此处理
    If moDocument.elementFromPoint(moDocument.parentWindow.event.x, moDocument.parentWindow.event.y).tagName = "A" Then
        Text1.Text = moDocument.elementFromPoint(moDocument.parentWindow.event.x, moDocument.parentWindow.event.y).href
        moDocument_onclick = False
    Else
        moDocument_onclick = True
        Text1.Text = ""
    End If
End Function

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    If mbInitialize = False Then
        mbInitialize = True
        Set moDocument = WebBrowser1.Document
        moDocument.body.innerHTML = "<a href=""http://www.baidu.com"" target=""_blank"">百度</a>"
    Else
        
    End If
End Sub

============================
你的工分可不大好挣啊, 接分, 哈哈

#11


to Hassle():
  我的第2个问题已经被你给解决了,感谢,同时50分已经记在你的名上了,等另一个问题解决后一起结贴(最多3天后解决不了也会结贴)。
  第1个问题应该也不很难,毕竟WebBrowser和Inet控件是共用同一个Session的。

#12


自己再顶一下,希望有人可以帮我解决第1个问题。。。

#13


关于第2个问题 我是用 hook做的 很好用  点哪里得到那里的任何东西  
是帮别人做的一个小项目 收费的

第一个问题不太好弄 除非晓得webbrowns的内部规则 直接去修改它的内存去改写相对网页路径好了

#14


第一个问题不管它了,在jiangsheng老大的blog上受到启发,已经搞得差不多了。
但是第二个问题又出现了一点小的波折:我这个链接是在web_documentcomplete事件中改写了某个tag的innerhtml后添加上去的,比如有个<td>本来的innerhtml是"<td>内容</td>",我给它改成"<td>内容</td><a href=http://www.xxx.com target=_blank>test</a>",然后我"set objDoc=web.document",但是当点击这个新加上去的链接的时候,竟然不会触发objDoc_onclick事件,好像是objDoc还不承认这个新链接是自己的一部分,这又该怎么办呢?

#15


下班前再顶一下,晚上来看看有没有惊喜发生。。。

#16


WebBrowser1.Navigate "http://www.baidu.com"

WebBrowser1.Document.write "<html><body><table><tr><td>Test</td><a href=""http://www.google.com.cn"" target=""_blank"">百度</a></tr><table></body></html>"

Set moDocument = WebBrowser1.Document

我这样试了一下(XP和W2K),没有问题,不过"百度"跑到"Test"上面,这是浏览器解释的问题,与楼主的问题关系不大