如何在不使用sendkeys的情况下登录网站?

时间:2017-09-22 02:39:50

标签: excel vba

我正在尝试不使用sendkeys登录此网站 https://terranovaeng.sienge.com.br/sienge/ 但是,似乎这个网站想让我输入我的登录名和密码。 这是我的代码:

    Dim Usuário As String
    Dim Login As String

    Usuário = "My User"
    Password = "My password"

'OPEN INTERNET EXPLORER
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True


'NAVIGATE TO PAGE
    IE.Navigate "https://terranovaeng.sienge.com.br/sienge/"
    'IDENTIFICA SE O SIENGE FOI TOTALMENTE CARREGADO
    While IE.ReadyState <> READYSTATE_COMPLETE
    Wend
    sng = Timer
        Do While sng + 5 > Timer
        Loop

    'SEND MY USER NAME
    IE.Document.getElementById("linkslogin").Focus
    SendKeys  “Usuário”
    SendKeys "{tab}", True
    'IDENTIFICA SE O SIENGE FOI TOTALMENTE CARREGADO
    While IE.ReadyState <> READYSTATE_COMPLETE
    Wend
    sng = Timer
        Do While sng + 3 > Timer
        Loop

    'SEND MY PASSWORD 
    SendKeys  “Login”
    SendKeys "{tab}", True
    'IDENTIFICA SE O SIENGE FOI TOTALMENTE CARREGADO
    While IE.ReadyState <> READYSTATE_COMPLETE
    Wend
    sng = Timer
        Do While sng + 3 > Timer
        Loop

    'CLICK EM ENTRAR
    IE.Document.all("pbEnviar").form.all("pbEnviar").Click
    While IE.ReadyState <> READYSTATE_COMPLETE
    Wend
    sng = Timer
        Do While sng + 10 > Timer
        Loop


End sub

我尝试使用:getelementbyid,getelementbyclassname,fire event fuction等,但它不起作用。没有使用sendkeys,有没有它?

2 个答案:

答案 0 :(得分:3)

这是有效的

ie.Document.getElementsByTagName("input")(2).Value = "username"
ie.Document.getElementsByTagName("input")(3).Value = "password"
ie.Document.getElementsByTagName("input")(5).Click

或者像这样

dim aaa as object
set aaa = ie.Document.getElementsByTagName("input")

aaa(2).Value = "username"
aaa(3).Value = "password"
aaa(5).Click

答案 1 :(得分:1)

这是需要的人的完整代码:

Sub Login()

On Error GoTo Sair

”以引用Internet Explorer的运行副本

Dim IE As InternetExplorer
'to refer to the HTML document returned
Dim html As HTMLDocument
Dim Usuário As String
Dim Login As String
Dim QuestionFieldLinks As IHTMLElementCollection

Usuário = Sheets("Ajustes").Range("E9").Value
Login = Sheets("Ajustes").Range("E11").Value

'open Internet Explorer in memory, and go to website
Set IE = New InternetExplorer
IE.Visible = True
IE.Navigate "https://terranovaeng.sienge.com.br/sienge/"
Do While IE.READYSTATE <> READYSTATE_COMPLETE
Application.StatusBar = "Criando Conecção com Sienge..."
    DoEvents
Loop
    'IDENTIFICA SE O SIENGE FOI TOTALMENTE CARREGADO
    While IE.READYSTATE <> READYSTATE_COMPLETE
    Wend
    sng = Timer
        Do While sng + 2 > Timer
        Loop

'返回HTML文档的显示文本

Set html = IE.Document
'Reset status bar
Application.StatusBar = ""

'INFORMA O NOME DOUSUÁRIO

 IE.Document.getElementsByTagName("input")(1).Value = Usuário
   'IDENTIFICA SE O SIENGE FOI TOTALMENTE CARREGADO
    Do While IE.Busy = True
        DoEvents
    Loop

'PEGA O NOME CORRETO DOUSUÁRIONO SERVIDOR DO SIENGE

 ' Call IE.Document.parentWindow.execScript("pegarUsernameCorreto(this.id);", "JavaScript")

   'IDENTIFICA SE O SIENGE FOI TOTALMENTE CARREGADO
    While IE.READYSTATE <> READYSTATE_COMPLETE
    Wend
    sng = Timer
        Do While sng + 1 > Timer
        Loop

'INFORMA A SENHA DOUSUÁRIO

IE.Document.getElementsByTagName("input")(2).Focus
   IE.Document.getElementsByTagName("input")(2).Value = Login

   IE.Document.all("submit").form.all("submit").Click
   'IDENTIFICA SE O SIENGE FOI TOTALMENTE CARREGADO
    Do While IE.Busy = True
        DoEvents
    Loop
    Application.StatusBar = "Conectado com o Sienge ..."

对: 'CONSULTA SE OUSUÁRIOTEMCONECÇÃOATIVA

'IDENTIFICA SE O SIENGE FOI TOTALMENTE CARREGADO

    Set elems = IE.Document.getElementsByTagName("a")
                For Each e In elems
                    If e.innerText Like "Prosseguir" Then
                    IE.Navigate "https://terranovaeng.sienge.com.br/sienge/removerUsuarioLogadoServlet?acao=S"
                Exit Sub
            Else
        Exit For
    End If
    Next e
     'IDENTIFICA SE O SIENGE FOI TOTALMENTE CARREGADO
    Do While IE.Busy = True
        DoEvents
    Loop

'MsgBox,“确定,Conectado com o Sienge。”,vbInformation,“ SiengeXLS-登录” Application.StatusBar =“围攻之路...”

'MSGBOX
    Set ele = IE.Document.getElementsByTagName("p")
    For Each e In ele
    If e.innerText Like "O número de sessões de usuários simultâneos atingiu o limite contratado." Then
    IE.Visible = False
    'MsgBox "Ok, Conectado com o Sienge.", vbInformation, "SiengeXLS - Login"
    Application.StatusBar = "O número de sessões de usuários simultâneos atingiu o limite contratado."
    IE.Quit
    Exit Sub
    End If
    Next e

End Sub