以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  代码执行问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=116197)

--  作者:lshshlxsh
--  发布时间:2018/3/21 9:52:00
--  代码执行问题
按钮1 代码

Dim dw As WinForm.ComboBox = e.Form.Controls("单位")
Dim weba As System.Windows.Forms.WebBrowser = e.Form.controls("webbrowser1").basecontrol
weba.ScriptErrorsSuppressed = True
Do Until weba.ReadyState = 4
    Application.DoEvents
Loop

Dim wydw = weba.Document.GetElementById("dw")
wydw.SetAttribute("value",dw.Text )
Dim submit = weba.Document.GetElementById("cx")
submit.InvokeMember("click")


按钮2 代码
Dim wy As WinForm.WebBrowser = e.Form.Controls("WebBrowser1")
Dim t1 As WinForm.Table = e.Form.Controls("Table1")

Dim web As New System.Windows.Forms.WebBrowser()
web.ScriptErrorsSuppressed = True
web.Navigate(wy.Address)
Do Until web.ReadyState = 4
    Application.DoEvents
Loop

Dim Cols() As String = {"公司","单位","日期","币别","支付总金额","金额","申请人","资金类型","实际支付日期","发生期间","应支付期间","类型","开户银行","账号","银行账号","应支付方式","财务支付方式","制单时间","请款单序号","资金申请单序号","备注","制单人","序号","打印标志" }

Dim elems As object = web.Document.GetElementById("tb").GetElementsByTagName("tr")

DataTables("临时资金流动清单表").RejectChanges
Dim m As Integer = 0
Dim k As Integer
For Each elem As object In elems
    Dim i As Integer = -1
    m = m + 1
    If m >=3 And  m< elems.count  Then  \'因为网页的表格有标题,如果不判断,就会增加出一个空行
        
        t1.Table.AddNew
        Dim tdelems As object =  elem.GetElementsByTagName("td")
        For Each tdelem As object In tdelems
            i = i + 1
            t1.Table.Current(Cols(i)) = tdelem.Innertext
        Next
        t1.Table.Current.Checked  =True
    End If
Next


请问一下为什么我这两段代码分开执行能取数   放到一个按钮 取数就错了  感觉第一段没执行 就到第二段代码了 



--  作者:有点甜
--  发布时间:2018/3/21 10:14:00
--  

应该是按钮1模拟点击登陆之后,还没有跳转到新的网页,你按钮2就执行了。试试改改

 

Dim dw As WinForm.ComboBox = e.Form.Controls("单位")
Dim weba As System.Windows.Forms.WebBrowser = e.Form.controls("webbrowser1").basecontrol
weba.ScriptErrorsSuppressed = True
Do Until weba.ReadyState = 4
    Application.DoEvents
Loop


Dim wydw = weba.Document.GetElementById("dw")
wydw.SetAttribute("value",dw.Text )
Dim submit = weba.Document.GetElementById("cx")
submit.InvokeMember("click")


Dim t1 As WinForm.Table = e.Form.Controls("Table1")
Dim web = e.Form.controls("webbrowser1").basecontrol
Do Until web.ReadyState = 4 AndAlso web.Document.GetElementById("tb") IsNot Nothing AndAlso web.Document.GetElementById("tb").GetElementsByTagName("tr").count > 1
    Application.DoEvents
Loop


Dim Cols() As String = {"公司","单位","日期","币别","支付总金额","金额","申请人","资金类型","实际支付日期","发生期间","应支付期间","类型","开户银行","账号","银行账号","应支付方式","财务支付方式","制单时间","请款单序号","资金申请单序号","备注","制单人","序号","打印标志" }


Dim elems As object = web.Document.GetElementById("tb").GetElementsByTagName("tr")


DataTables("临时资金流动清单表").RejectChanges
Dim m As Integer = 0
Dim k As Integer
For Each elem As object In elems
    Dim i As Integer = -1
    m = m + 1
    If m >=3 And  m< elems.count  Then  \'因为网页的表格有标题,如果不判断,就会增加出一个空行
       
        t1.Table.AddNew
        Dim tdelems As object =  elem.GetElementsByTagName("td")
        For Each tdelem As object In tdelems
            i = i + 1
            t1.Table.Current(Cols(i)) = tdelem.Innertext
        Next
        t1.Table.Current.Checked  =True
    End If
Next


--  作者:lshshlxsh
--  发布时间:2018/3/21 10:23:00
--  
这样也是没查询出来的  结果还是不对   能不能设定第二段代码过1秒再执行
--  作者:有点甜
--  发布时间:2018/3/21 11:43:00
--  

执行这个代码,msgbox(1)能否弹出?要判断是否进入了第二个页面,就要修改红色代码判断的(你页面的html代码发上来看看)

 

Dim t1 As WinForm.Table = e.Form.Controls("Table1")
Dim web = e.Form.controls("webbrowser1").basecontrol
Do Until web.ReadyState = 4 AndAlso web.Document.GetElementById("tb") IsNot Nothing AndAlso web.Document.GetElementById("tb").GetElementsByTagName("tr").count > 1
    Application.DoEvents
Loop

msgbox(1)


--  作者:有点甜
--  发布时间:2018/3/21 11:45:00
--  

如果要延迟一秒执行,参考

 

system.threading.thread.sleep(1000)

 

或者

 

static ptime As Date = Nothing
Dim sp As TimeSpan = Date.now - ptime
ptime = Date.now
If sp.TotalMilliseconds < 5000  Then \'间隔5000毫秒
    Return
End If