WebBrowser,检查按钮是否可用

时间:2013-12-30 16:15:26

标签: .net vb.net winforms visual-studio-2010 webbrowser-control

我正在尝试点击网页上的按钮。 我有当前的代码:

WebBrowser1.Document.All("load-more").InvokeMember("click")

但是,我还有其他代码可以向下滚动页面,因为整个页面都没有加载,直到你到达底部。 最后,如果你想要加载更多的东西,你可以选择几次到达底部。 您单击以加载更多按钮的ID是“load-more”,但是,该按钮并不总是可用。

那么它是否有可能等到按钮可点击直到它实际点击按钮为止?

我尝试过使用System.Threading.Thread.Sleep(6500),但我不能使用它,因为如果我这样做,页面就不会自动向下滚动。

任何人对我如何实现这一目标都有任何想法?

我专注于WebBrowser:

Me.WebBrowser1.Document.Body.Focus()

我向WebBrowser发送了键以滚动:

System.Windows.Forms.SendKeys.Send("{END 5}")

滚动脚本现在看起来像这样:

Dim Wait As Date
Now.AddSeconds(Second)
Wait = Now.AddSeconds(Second).AddSeconds(1)

Do Until Now > Wait
    Application.DoEvents() ' Allow windows messages to be processed
Loop
Me.WebBrowser1.Document.Body.Focus()
System.Windows.Forms.SendKeys.Send("{END 5}")

所以基本上,现在,一旦加载了网页,它就会自动向下滚动到底部。

我仍然不知道如何检查按钮是否可点击 - 只有在网页滚动到底部几次后才会显示按钮(每次滚动都会加载更多内容)。

1 个答案:

答案 0 :(得分:0)

我发现了如何做到这一点。 这其实很简单! 首先,我有这个代码:

Const Second As Double = 1.0# / (1440.0# * 60.0#)
    Dim Wait As Date
    Now.AddSeconds(Second)
    Wait = Now.AddSeconds(Second).AddSeconds(1)
    Do Until Now > Wait
        Application.DoEvents() ' Allow windows messages to be processed
    Loop
    Me.WebBrowser1.Document.Body.Focus()
    System.Windows.Forms.SendKeys.Send("{END 5}")

它基本上等了一会儿,连续5次发送“END”键,“END”键只滚动到页面的末尾。

然后我得到了这段代码:

Dim buttonAv = WebBrowser1.Document.GetElementById("load-more")
    If buttonAv <> Nothing Then
        buttonAv.ScrollIntoView(True)
        WebBrowser1.Document.All("load-more").InvokeMember("click")
    End If

基本上,我正在制作我要点击的按钮(其ID为“load-more”)为“buttonAv”,然后我检查buttonAv是否在视图中 - 如果不是我滚动到查看,然后单击它。