首页 > 解决方案 > 搜索网页并单击按钮

问题描述

我正在尝试在网页上使用 VBA。我想出了如何登录并提交我的用户名和密码。

我需要点击 3 个按钮。一旦单击了上一个按钮,它们就会出现。我有我的 if 语句,如果我逐段浏览代码,它确实有效。

看起来它多次循环遍历每个语句。它经过 if then 部分,然后退出 for、end if、next 并返回 if 语句而不完成任务。它这样做了几次,直到最终它起作用。

我已经尝试过.document.getElementsbyId,所有与此相关的都不起作用。

也许有一种方法可以搜索文档并让它点击按钮?

似乎它不起作用,因为直到最终它才是真的?

'Enters username and password & submits

With .document.forms("signinginn")
    .User.Value = "username"
    .Password.Value = "password"
    .document.forms(0).submit
End With

Application.Wait DateAdd("s", 2, Now)

With IE.document
    Set a = .getElementsbyTagName("input") 

    For Each a In .getElementsbyTagName("input")

        If a.getAttribute("value") = "Start" Then
            a.Click
            Exit For
        End If

    Next a

如果我部分地播放它,这段代码就可以工作,但它会经历几次。

我能在第一时间做对吗?此代码的预期输出是立即单击按钮。

标签: htmlexcelvba

解决方案


尝试为元素存在添加一个定时循环,适当的页面加载等待,并使用 querySelector 删除当前循环并简单地定位输入元素的属性值

Option Explicit

'VBE > Tools > References: Microsoft Internet Controls
Public Sub ClickElement()
    Dim ie As Object, elems As Object, t As Date
    Const MAX_WAIT_SEC As Long = 10

    Set ie = CreateObject("InternetExplorer.Application")
    With ie
        .Visible = True
        .Navigate2 "url"

        While .Busy Or .readyState < 4: DoEvents: Wend

        With .document.forms("signinginn")
            .User.Value = "username"
            .Password.Value = "password"
            .document.forms(0).submit
        End With

        While .Busy Or .readyState < 4: DoEvents: Wend
        t = Timer
        Do
            On Error Resume Next
            Set elems = .document.querySelectorAll("input[value=Start]")
            On Error GoTo 0
            If Timer - t > MAX_WAIT_SEC Then Exit Do
        Loop While elems Is Nothing
        If Not elems Is Nothing Then
            elems.item(0).Click
        Else
            Exit Sub
        End If
        'Other code
        Stop   '<=Delete me later
        .Quit
    End With
End Sub

推荐阅读