【问题标题】:WebBrowser, check if button is availableWebBrowser,检查按钮是否可用
【发布时间】:2013-12-30 16:15:25
【问题描述】:

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

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

但是,我还有其他代码可以在页面上向下滚动,因为直到您到达底部才会加载整个页面。 最终,在您到达底部几次后,您可以选择是否要加载更多内容。 您单击以加载更多的按钮的 ID 是“加载更多”,但是,该按钮并不总是可用。

那么它怎么可能等到按钮可点击才真正点击按钮呢?

我尝试过使用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}")

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

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

【问题讨论】:

  • 如果您的页面加载需要 6.6 秒怎么办?
  • 向下滚动页面的代码是什么?
  • 页面加载后页面自动滚动。
  • 将代码添加到帖子中。

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


【解决方案1】:

我已经找到了如何做到这一点。 其实真的很简单! 首先,我有这个代码:

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 是否在视图中 - 如果不是,我将其滚动到查看然后点击它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-28
    • 2012-11-09
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    相关资源
    最近更新 更多