我正在尝试不使用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,有没有它?
答案 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