作者mapleport (枫港的秋天)
看板Visual_Basic
标题Re: [.NET] Web Complete没完整载入网页的问题
时间Mon Nov 3 14:37:26 2014
各位程式高手好,
之前问的Webbrowser_Complete重复触发的问题,简化後的程式码贴在下面
再请各位有空帮忙看看,感谢!
这个简化的程式码是想先让浏览器搜寻"林书豪"这个关键字,
当网页下载完成时,开始寻找"下一页"这个连结,
找到了就点击他,然後搜寻结果就会翻页,
於是Webbrowser就又被触发,再继续重复翻页。
他在xp作业系统没问题,但在win7编译执行会乱跳页,无法1 2 3 4 5..一直翻页下去
(看看Textbox1的"目前翻页次数=N")
可以把code copy到VB贴上执行就知道了
=========================================================
Public Class Form1
Dim k = 0 ' 算第几页=翻页次数-1
' 一开始Load表单时要做的事:Web1浏览以下网址
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim URL As String = "
https://www.google.com/?hl=zh-tw&gws_rd=ssl#hl=zh-tw&q=林书豪&start=0"
WebBrowser1.Navigate(URL)
End Sub
' 当Web1下载网页完成时,触发执行此Sub副程式内容
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
TextBox1.Text = "浏览器下载网页完成 目前翻页次数=" + k.ToString
Dim a As HtmlElement
For Each a In WebBrowser1.Document.All
If (InStr(1, a.OuterHtml.Trim, "下一页") > 0) And (UCase(a.TagName) = "A") Then
TextBox2.Text = a.OuterHtml
''''''''''''''''''''''''''''''''[delay start]
Dim TimeLast11 = 2000 ' 要延迟 t 秒,就设为 t *1000
Dim Start11 As Integer = Environment.TickCount() ' 现在时间start = Environment.TickCount() (vb.net语法)
Do
If Environment.TickCount() - Start11 > TimeLast11 Then Exit Do
Application.DoEvents() ' 要记得写这行,不然都在跑回圈,画面可能会不见
Loop
''''''''''''''''''''''''''''''''[delay end]
a.InvokeMember("click") ' 点击
k = k + 1 ' 翻页次数+1
Exit Sub
End If
Next
End Sub
==================================================================
※ 引述《cf1064 (蚵仔)》之铭言:
: ※ 引述《mapleport (枫港的秋天)》之铭言:
: : 请输入专案类型(网站专案或者应用程式专案):
: : Visual Basic 2010 Express
: : 各位高手好,
: : 小弟是初学者,在xp作业系统上有写一个程式,
: : 在网页下载完成後,会点击我要的一些link进到其他页以撷取资讯
: : 在xp上可以顺利执行 (需要安装.NET4.0等等)
: : 後来在WIN7上面安装VB2010 Express将原本程式码做编译,
: : 发现网页尚未完全载入时就进入Sub WebBrowser1_DocumentCompleted副程式里面,
: : 由上而下开始寻找link,
: : 因此找不到我要的link(载入的那一页一定有我要的link,通常在网页下方)
: : 请问有高手知道如何解决吗,感激不尽><
: : 我也试过以下的方式 但不知为何无效
: : 1. If (WebBrowser1.ReadyState = WebBrowserReadyState.Complete) Then...或
: : 2. If (WebBrowser1.ReadyState = WebBrowserReadyState.Loading Or WebBrowser1.ReadyState =
: : WebBrowserReadyState.Loaded)......
: : 3. 等找到我要的link才视为载入完成,但是不知道怎麽写
: 在complete里加上
: While (web.ReadyState <> WebBrowserReadyState.Complete)
: Application.DoEvents()
: End While
: 来确保他是真的载入完成这样呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.140.1.251
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Visual_Basic/M.1414996648.A.B7D.html