【问题标题】:Navigate and wait for webbrowser response with sendkeys使用 sendkeys 导航并等待 webbrowser 响应
【发布时间】:2015-01-31 16:29:12
【问题描述】:

是否可以打开网页、导航一次/单击按钮并第二次导航页面而无需使用三个按钮(三个按钮都可以正常工作)?

我尝试了 sleep(不起作用)和 SendKeys.SendWait(也不起作用)。

代码如下:

Dim browser As New WebBrowser
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        With browser
            browser.Name = "mybrowser"
            .Dock = DockStyle.Fill
            .Url = New Uri("http://pretraga2.apr.gov.rs/ObjedinjenePretrage/Search/Search")
            .Visible = True
        End With
        Me.Controls.Add(browser)
        browser.Focus()
        'browser.Focus()
        SendKeys.SendWait("{TAB}" & "{TAB}" & "08727988" & "{ENTER}") ' & "{TAB}" & "{ENTER}")
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        browser.Focus()
        SendKeys.Send("{TAB}" & "{TAB}" & "20084693" & "{ENTER}") ' & "{TAB}" & "{ENTER}")
        SendKeys.SendWait("{TAB}" & "{TAB}" & "{TAB}" & "{TAB}" & "{ENTER}")
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        browser.Focus()
        SendKeys.Send("{TAB}" & "{TAB}" & "{TAB}" & "{TAB}" & "{ENTER}")
    End Sub

【问题讨论】:

    标签: vb.net webbrowser-control sendkeys


    【解决方案1】:

    是的,我认为这是可能的,但您必须等到浏览器完成加载。您使用什么浏览器控件?我在这个例子中使用了 SHDocVw.InternetExplorer:

     Public Sub browse(ByVal szURL As String, Optional ByVal bWaitTillDone As Boolean = True)
    
        Dim nTickStart As Long
        Dim nTickEnde As Long = 0
    
        Dim i As Integer = 0
    
        Do
            Try
    
                IE.Navigate(szURL)
    
                If bWaitTillDone Then
    
                    nTickStart = System.Environment.TickCount
    
                    While IE.Busy
                        fnSleepMS(15)
    
                        nTickEnde = System.Environment.TickCount
                        If nTickEnde - nTickStart > IEBrowser.nMaxWaitSeconds * 1000 Then
                            Throw New Exception("Browse hat zu lange gedauert!")
                        End If
    
                    End While
                End If
    
                Exit Do
    
            Catch ex As Exception
                i += 1
                If i >= 5 Then
                    Throw New Exception("IEBrowser.browse(): " & szURL & "--> " & ex.Message)
                Else
                    LOG.add("IEBrowser.browse() - Versuch (" & i & ")" & ex.Message)
                    fnSleep(1, LOG)
                End If
            End Try
        Loop
    
    End Sub    
    

    使用此浏览器控件,您可以读出所有 ahref-Tags 和 Buttons 并直接单击它们,这样您就可以建立一个序列。

    希望我对您的理解正确,这对您有所帮助。但是请告诉您在哪个环境中使用哪个浏览器控件(Framework + Visual Studio)

    【讨论】:

    • 感谢您的帮助。我正在使用 Framework 4.5、VS Express 2013 和标准网络浏览器。我没有修复代码 IE、fnSleepMS、IEBrowser 中缺失变量的经验,抱歉。
    • 那么它应该可以访问“DOM”。我没有示例,但我知道您可以通过编程方式访问每个 html 控件。
    • 我现在看到我必须安装 SHDocVw 库,但找不到它/
    • 我认为它也适用于 WebBrowser 控件和 DOM。看看这个:codeproject.com/Articles/85847/HTML-DOM-Using-NET
    • 谢谢你的链接,我以后会需要它,但如果我理解正确的话,DOM 是用来从 HTML 页面中提取特定数据的。在我的例子中这是不可能的。最后一页(最后一次点击)的部分链接是“随机”生成的,因此我无法从 HTML 源中提取最终链接。在上面的示例中,我唯一能做的就是使用 Sendkeys 导航它,直到打开最后一页(显示最终链接)。
    猜你喜欢
    • 2013-05-15
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 2018-11-07
    • 2014-01-01
    相关资源
    最近更新 更多