Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Automatização de login e senha, sem referência por ID [RESOLVIDO]

A Web está aí, não há como negar. Ela é onipresente em praticamente toda operação eletrônica realizada nos dias de hoje. Como não podia ser diferente, o Excel, ferramenta máxima para analistas e profissionais das mais diversas áreas do mercado precisa estar alinhado com esta necesssidade. E ele está! Neste forum, o debate é focado em expor dúvidas, sugestões, modelos de código e exemplos de uso do Excel na Integração com tecnologias Web.
Marzzona
Acabou de chegar
Acabou de chegar
Mensagens: 4
Registrado em: Ter Nov 30, 2021 8:59 am

Automatização de login e senha, sem referência por ID [RESOLVIDO]

Mensagem por Marzzona »

Situação: Quero logar em um site, http://mime.lzt.com.br, mas estou com algumas dificuldades para implementar o código. Tentei buscar pelo nome do input e não funcionou.

Objetivo: Abrir o link, completar o login com o texto de uma célula que terá a informação, completar, da mesma forma, o espaço de senha e apertar posteriormente no botão para “entrar”.

Erro encontrado: Erro em tempo de execução ‘91’ - A variável do objeto ou a variável do bloco “With” não foi definida

Código VBA:

Código: Selecionar todos

Const sSiteName = "http://mime.lzt.com.br"
Sub login()

    Dim UserName As String, Password As String, LoginData As Worksheet
    Set LoginData = ThisWorkbook.Worksheets("PAINEL")
        UserName = LoginData.Cells(5, 3).Value
        Password = LoginData.Cells(6, 3).Value
        
    Dim ie As Object
        Set ie = CreateObject("InternetExplorer.Application")
    With ie
        .Navigate sSiteName
        ieBusy ie
        .Visible = True
        Dim oLogin As Object, oPassword As Object
        Set oLogin = .Document.getElementsByName("login")
        Set oPassword = .Document.getElementsByName("senha")
        oLogin(0).innerText = UserName
        oPassword(0).innerText = Password
        .Document.forms(0).submit
    End With

End Sub

Sub ieBusy(ie As Object)
    Do While ie.Busy Or ie.ReadyState < 4
        DoEvents
    Loop
End Sub


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
webmaster
Administrador
Mensagens: 3114
Registrado em: Sex Jul 24, 2009 2:44 pm
Contato:

Re: Automatização de login e senha, sem referência por ID

Mensagem por webmaster »

O problema é que o formulario de login está dentro de um iframe. O código abaixo deve funcionar:

Código: Selecionar todos

With ie
        .Navigate sSiteName
        ieBusy ie
        .Visible = True
        Dim myFrame As Object
        Set myFrame = .Document.frames("myFrame")
        Dim oLogin As Object, oPassword As Object
        Set oLogin = myFrame.Document.getElementsByName("login")
        Set oPassword = myFrame.Document.getElementsByName("senha")
        oLogin(0).innerText = UserName
        oPassword(0).innerText = Password
        .Document.forms(0).submit
 End With
Um ponto de atenção. Aqui eu precisei adicionar o site na lista de compatibilidade do IE. Do contrário, a propriedade Document vinha sempre vazia.


Marzzona
Acabou de chegar
Acabou de chegar
Mensagens: 4
Registrado em: Ter Nov 30, 2021 8:59 am

Re: Automatização de login e senha, sem referência por ID

Mensagem por Marzzona »

Fiz a alteração no código, mas a mensagem que passei a receber foi:

"O método 'frames' do objeto'JScriptTypeInfo' falho"

Não sei qual a origem deste erro agora.


Marzzona
Acabou de chegar
Acabou de chegar
Mensagens: 4
Registrado em: Ter Nov 30, 2021 8:59 am

Re: Automatização de login e senha, sem referência por ID

Mensagem por Marzzona »

Fiz uma alteração no códico que fez funcionar:

Sub login()
Dim ie As New InternetExplorer
With ie
.Visible = True
.Navigate2 sSiteName

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

With .Document.getElementById("myframe").contentDocument

.querySelector("[name=login]").innerText = "123"
.querySelector("[name=senha]").innerText = "password"

End With

While .Busy Or .ReadyState < 4: DoEvents: Wend
End With
End Sub


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder