Problemas con el botón de Internet Explorer con VBA.

Necesito ayuda para hacer clic en un botón usando vba. El problema es que no se puede hacer clic en el botón cuando ingreso automáticamente el nombre de usuario y la contraseña. Solo se puede hacer clic cuando escribo manualmente el nombre de usuario y la contraseña. Mi código funciona con otros botones en el sitio web, excepto este.

'Aquí está la parte de mi código que ingresa el nombre de usuario, la contraseña y se supone que debe hacer clic en el botón.

    Set HTMLInput = HTMLDoc.getElementById("USER")
    HTMLInput.Value = "user"

    Set HTMLInput = HTMLDoc.getElementById("Password")
    HTMLInput.Value = "password"

    Set HTMLButton= HTMLDoc.getElementById("subBtn")
    HTMLButton.Click

'Esta es la información del botón

<button type="submit" class="btn btn-primary ng-scope" data-ng-click="saveUserID()" id="subBtn" translate="signin.signin">Sign In</button>

Leí en alguna parte que puedo usar el Application.sendkeys"username",True para simular la escritura en el teclado para ver si se puede hacer clic en el botón, pero tampoco puedo hacer que funcione. ¿Hay alguna otra forma de hacer clic en este botón?

2
Chum Ba 10 may. 2019 a las 21:16

3 respuestas

La mejor respuesta

Cambie el atributo deshabilitado a Falso

Option Explicit
'VBE > Tools > References: Microsoft Internet Controls
Public Sub Login()
    Dim ie As New InternetExplorer
    With ie
        .Visible = True
        .Navigate2 "https://workforcenow.adp.com/workforcenow/login.html"

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

        With .document
            .querySelector("#user_id").Value = "something"
            .querySelector("#password").Value = "somethingElse"

            With .querySelector("#subBtn")
                .disabled = False
                .Click
            End With
            Stop '< delete me later
        End With

        While .Busy Or .readyState < 4: DoEvents: Wend
        'other stuff post login
        .Quit
    End With
End Sub
1
QHarr 11 may. 2019 a las 02:02

Intenta hacer que el sitio web piense que estás escribiendo esos valores reales. Por ejemplo:

Set HTMLInput = HTMLDoc.getElementById("USER")
HTMLInput.Focus '<-- set the focus on the input (make the element the active one)
Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 1) '<-- wait a second
HTMLInput.Value = "user"

Set HTMLInput = HTMLDoc.getElementById("Password")
HTMLInput.Focus '<-- set the focus on the input (make the element the active one)
Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 1) '<-- wait a second
HTMLInput.Value = "password"

Set HTMLButton= HTMLDoc.getElementById("subBtn")
HTMLButton.Click '<-- finally click the button

Nota: como no compartió la URL, este código no se ha probado. Pero me ha funcionado en el pasado en ciertos sitios web fuertemente basados en JavaScript.

1
Matteo NNZ 10 may. 2019 a las 20:17

Así es como lo resolví. No estoy seguro si esta es la mejor manera de resolverlo, pero funciona. El comando sendkeys realmente hace pensar que está escribiendo manualmente la identificación y la contraseña. Necesitaba agregar el tiempo de espera porque salta a la contraseña rápidamente y no termina de ingresar el user_id. ¡Gracias a todos por tomarse su tiempo para ayudarme!

    HTMLInput.Focus '<-- set the focus on the input (make the element the active one)
    Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 1) '<-- wait a second
    SendKeys "user"
    Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 1) '<-- wait a second

    Set HTMLInput = HTMLDoc.getElementById("password")
    HTMLInput.Focus '<-- set the focus on the input (make the element the active one)
    Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 1) '<-- wait a second
    SendKeys "password"
    Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 1) '<-- wait a second

    Set HTMLbutton = HTMLDoc.getElementById("subBtn")
    HTMLbutton.Click '<-- finally click the button```
0
Chum Ba 11 may. 2019 a las 02:55