Vba 在excel中使用自动登录宏时用户名或密码不正确

Vba 在excel中使用自动登录宏时用户名或密码不正确,vba,excel,authentication,internet-explorer,dom,Vba,Excel,Authentication,Internet Explorer,Dom,我知道登录凭据100%准确,但我收到消息“用户名或密码错误” 对不起,我不能给你的登录详细信息,但我希望有人可以看看这里的登录页面。我使用了inspect元素来尝试理解正在发生的事情,但这对我来说有点困惑 请有人给我一些提示,这样我就可以成功登录了 我已经研究了登录页面HTML源代码,我认为这可能与以下行有关:- <p class="ng-cloak" ng-if="loginError">Wrong username or password</p> <in

我知道登录凭据100%准确,但我收到消息“用户名或密码错误”

对不起,我不能给你的登录详细信息,但我希望有人可以看看这里的登录页面。我使用了inspect元素来尝试理解正在发生的事情,但这对我来说有点困惑

请有人给我一些提示,这样我就可以成功登录了

我已经研究了登录页面HTML源代码,我认为这可能与以下行有关:-

<p class="ng-cloak" ng-if="loginError">Wrong username or password</p>
    <input name="__RequestVerificationToken" type="hidden"     value="O9qaspsZWkSDJc2z8hFkGTqT8XAQ2xAY2QcHMpK1w6v_VKw3T-zQ1H8VpoxARDCnGi-Ed2saqXJjwkE7Hsh4RY2kp6pC_AAATZW7vqFynKw1" />
错误的用户名或密码

有人能确认我的方向是否正确吗

下面是我正在使用的代码

谢谢

Dim HTMLDoc As HTMLDocument
Dim MyBrowser As InternetExplorer
Sub test1()

  Dim MyHTML_Element As IHTMLElement
  Dim MyURL As String
  On Error GoTo Err_Clear
  MyURL = "https://grp.controlant.com/user/login"
  Set MyBrowser = New InternetExplorer
  MyBrowser.Silent = True
  MyBrowser.navigate MyURL
  MyBrowser.Visible = True

  Do
  Loop Until MyBrowser.readyState = READYSTATE_COMPLETE

  Set HTMLDoc = MyBrowser.document
  HTMLDoc.all.UserName.Value = "my_username" 'Enter your email id here
  HTMLDoc.all.Password.Value = "my_password" 'Enter your password here

  For Each MyHTML_Element In HTMLDoc.getElementsByTagName("button")
    If MyHTML_Element.Type = "submit" Then MyHTML_Element.Click: Exit For
  Next

  Err_Clear:
  If Err <> 0 Then
    Err.Clear
    Resume Next
  End If
End Sub
Dim HTMLDoc作为HTMLDocument
将MyBrowser设置为InternetExplorer
子测试1()
将MyHTML_元素设置为IHTMlement
将MyURL设置为字符串
错误时转到错误清除
MyURL=”https://grp.controlant.com/user/login"
设置MyBrowser=New InternetExplorer
MyBrowser.Silent=True
MyBrowser.navigate MyURL
MyBrowser.Visible=True
做
循环,直到MyBrowser.readyState=readyState\u完成
设置HTMLDoc=MyBrowser.document
HTMLDoc.all.UserName.Value=“my_UserName”'在此处输入您的电子邮件id
HTMLDoc.all.Password.Value=“my_Password”'在此处输入您的密码
对于HTMLDoc.getElementsByTagName(“按钮”)中的每个MyHTML_元素
如果MyHTML\u Element.Type=“submit”,则MyHTML\u Element.Click:退出以获取
下一个
错误清除:
如果错误为0,则
呃,明白了
下一步继续
如果结束
端接头
您实际上没有向字段提供用户名和密码。要这样做,请替换

HTMLDoc.all.UserName.Value = "my_username" 'Enter your email id here 
HTMLDoc.all.Password.Value = "my_password" 'Enter your password here
下面(我查看了HTML源代码以查找标记的ID

HTMLDoc.GetElementById("username").Value = "my_username" 'Enter your email id here 
HTMLDoc.GetElementById("password").Value = "my_password" 'Enter your password here

如果您手动键入用户名和密码并提交表单,则请求表单数据如下:

grant_type=password&username=qwert12345&password=asdfg67890&client_id=FMUI&client_secret=thisisnotverysecretiknow
如果以编程方式将值分配给输入,则请求表单数据

grant_type=password&username=undefined&password=undefined&client_id=FMUI&client_secret=thisisnotverysecretiknow
正如您所看到的,凭据是未定义的。
。在提交之前,还要查看开发者工具中的
节点内容。当刚刚加载的表单类属性是
ng pristine ng valid
时,输入类属性是
ng pristine ng untouched ng valid ng empty
。键入用户名a后手动nd password属性更改为
ng valid ng dirty ng valid parse
ng valid ng not empty ng dirty ng valid parse ng

因此,仅仅为输入赋值是不够的。我甚至尝试通过编程方式赋值,然后通过编辑DOM节点手动更改类属性,但没有效果。我发现的唯一方法是为输入触发通用更改事件

选项显式
子登录()
Dim objEvent、objNodeUsername、objNodePassword、objNodeSubmit
使用CreateObject(“InternetExplorer.Application”)
.Visible=True
“打开页面
.导航“https://grp.controlant.com/user/login"
“等待IE和页面准备好
执行While.Busy或Not.readyState=4:DoEvents:Loop
'等待DOM准备就绪
Do Until.document.readyState=“complete”:DoEvents:循环
'等待用户名输入出现
Do While TypeName(.document.getElementById(“用户名”)=“Null”:DoEvents:Loop
'在IE9中添加了对dispatchEvent的支持
'创建事件对象
Set objEvent=.document.createEvent(“HTMLEvents”)
'设置事件
objEvent.initEvent“change”,True,True
'获取用户名输入并赋值
设置objNodeUsername=.document.getElementById(“用户名”)
objNodeUsername.Value=“qwert12345”
'将事件发送到输入节点
objNodeUsername.dispatchEvent objEvent
'获取密码输入并分配值
设置objNodePassword=.document.getElementById(“密码”)
objNodePassword.Value=“asdfg67890”
'将事件发送到输入节点
objNodePassword.dispatchEvent objEvent
'获取按钮并单击
设置objNodeSubmit=.document.getElementsByTagName(“按钮”)(0)
objNodeSubmit。单击
以
端接头

我想到的可能是凭证的编码有问题。您的凭证中是否使用了非ASCII字符?谢谢您的评论,但所有承租人都很好,用户名中有@,但这是ASCII。但是如果我在从保存的用户名中选择用户名后复制并通过用户名s在登录Excel表单的下拉列表中,它是超链接的,但是当我复制并超过通过Excel宏输入的用户名时,它显示为普通文本。可能只有我,虽然它很奇怪谢谢更正,但我仍然得到错误的用户名和密码,表单中的字段实际上在两个I中都填充了nstances!关于如何将登录代码与excel web数据工具结合起来的任何想法,我使用此方法创建了一个宏,但我总是在运行宏后登录,这就是自动登录请求的原因!但我不清楚如何将它们结合起来,使之成为一个工作的自动登录和抓取宏。这对我来说是一个救命恩人的办法,即使在这些年++