Foxtable(狐表)用户栏目专家坐堂 → [求助]关于webbrowser控件加载完成问题


  共有3944人关注过本帖树形打印复制链接

主题:[求助]关于webbrowser控件加载完成问题

帅哥哟,离线,有人找我吗?
jspta
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
[求助]关于webbrowser控件加载完成问题  发帖心情 Post By:2015/2/26 11:19:00 [显示全部帖子]

 以下代码本意是想当网页加载完成后(使用DocumentCompleted事件),使LoadReady由False变成True,然后跳出循环,目的是函数结束时,返回一个数组。
但是在循环体或者说整个过程中LaodReady一直是False除非触发了messagebox才会变True,如何解决?
Dim n As Integer = 0
            Do Until n > 5
                If LoadReady = True Then
                    Exit Do
                Else
                    System.Threading.Thread.Sleep(2000)
                    n = n + 1
                    If n > 5 Then
                        MessageBox.Show("查询失败,请确保网络正常后,重新尝试")
                    End If
                End If
            Loop
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:网页测试.foxdb


[此贴子已经被作者于2015/2/26 12:56:46编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2015/2/26 11:31:00 [显示全部帖子]

以下是引用有点甜在2015/2/26 11:24:00的发言:
 为什么不直接在 DocumentCompleted 事件处理?
如果挂在DocumentCompleted 事件中,如何在事件结束时,返回一个值?或者说如何在事件过程中赋值,并在事件结束后,把这个值返回个调用者?
        Sub DocumentCompletedEventHandler(ByVal sender As System.ObjectByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgsHandles _WebBaseControl.DocumentCompleted
            Dim web As System.Windows.Forms.WebBrowser = sender
            If web.ReadyState = System.Windows.Forms.WebBrowserReadyState.Complete Then 
                Dim doctext As String = web.DocumentText.Replace("""""")
                If doctext.Contains("status:201"Then 
                    
                Else
                    JsonText = web.DocumentText '为了获得这个值,并执行一定的代码,最终返回执行后的一个数组?有什么办法可以获得,或者通知程序这个已经执行完成了?
                    LoadReady = True
                End If
            End If
        End Sub


 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2015/2/26 12:58:00 [显示全部帖子]

上传了附件了,请帮忙下。就是需要立即获得,并且要继续处理。而不是点击Button2

 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2015/2/26 14:16:00 [显示全部帖子]

以下是引用Bin在2015/2/26 14:08:00的发言:
没有问题的啊.正常获取值,获得之后你继续把操作代码写到里面去即可
点击BUTTON1 第一个message弹出的时候就是空白啊,必须在事件中弹出message,才会使JsonText这个变量有值。


 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2015/2/26 14:18:00 [显示全部帖子]

或者换个思路,已知网址 http://www.foxtable.com,获取网页正文代码,不一定要用webBrowser控件,如何实现?

 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2015/2/26 14:22:00 [显示全部帖子]

Dim strAddr As String = "http://www.foxtable.com/"
Dim stream As System.IO.Stream = System.Net.WebRequest.Create(strAddr).GetRequestStream
'Dim sr As System.IO.StreamReader = New System.IO.StreamReader(stream, System.Text.Encoding.UTF8)
'Output.Show(sr.ReadToEnd)

提示这个错误,如何解决
System.Net.ProtocolViolationException: 无法发送具有此谓词类型的内容正文。

 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2015/2/26 14:47:00 [显示全部帖子]

以下是引用有点甜在2015/2/26 14:34:00的发言:

测试了一下,你1楼的代码没有问题,值是False,是因为你循环完以后,网页还没有加载完毕。

 

为什么要搞这么复杂啊,直接循环判断就好啊

 

Dim web As New System.Windows.Forms.WebBrowser()
web.ScriptErrorsSuppressed = True
web.Navigate("http://www.foxtable.com")
Do Until web.ReadyState = 4
    Application.DoEvents
Loop


'取数据
Dim ls As Object = web.Document.getElementsByTagName("a")
For Each l As object In ls
    output.show(l.GetAttribute("href"))
Next


怕造成死循环了,Application.DoEvents 没这句,web.ReadyState = 4 一直不能变成4,10秒后自动退出了。

现在改成Bin的方案了,我只要获取网页信息,不需要真的打开网页。

谢谢两位了


 回到顶部