我正在尝试使用 VBA 单击网站上的 "Logon" 按钮自动登录

I'm trying to use VBA to click a "Logon" button on a website to automatically logon

我一直在尝试使用 VBA 自动提交登录凭据,我可以获取要填充的用户名和密码字段,但我无法获取用于单击登录按钮的代码。我已经尝试了在这里以及其他网站上找到的许多解决方案,但无法正常工作。这是我的代码(我已经删除了任何点击按钮的尝试):

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

Dim MyHTML_Element As IHTMLElement
 Dim MyURL As String
 On Error GoTo Err_Clear
 MyURL = "https://www.oms.itradenetwork.com/secure/login/logon.cfm?   _Key=8C049059F2DD44009E"
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 = "MyName"
 HTMLDoc.all.Password.Value = "MyPassword"
'Code Here to click the button


Err_Clear:
If Err <> 0 Then
 Err.Clear
 Resume Next
End If
End Sub

以下是一些源代码以及我认为登录所在的位置:

Ext.onReady(function() {
    Ext.QuickTips.init();
    Ext.form.Field.prototype.msgTarget = 'side';
    document.body.style.overflow = "hidden";

    var tb = new Ext.Toolbar({
        items: [{
            xtype: 'splitbutton',
            id: 'setLanguage',
            text: 'English',

            menu: new Ext.menu.Menu({
            items: [
                    {text: 'English', id: 'EN', handler: changeLanguage},
                    {text: 'Español', id: 'ES', handler: changeLanguage},
                    {text: 'Deutsch', id: 'DE', handler: changeLanguage},
                    {text: 'Français', id: 'FR', handler: changeLanguage},
                    {text: 'Nederlands', id: 'NL', handler: changeLanguage}
                ]
            })
        }, '->', {
            text: 'Logon',
            id: 'Logon',
            disabled: true,
            handler: performLogon,
            formBind: true
        }]
    });

    var logonForm = new Ext.FormPanel({
        labelWidth: 100,
        frame: true,
        title: 'Member Logon',
        id: 'LogonForm',
        bodyStyle: 'padding: 5px 5px 0',
        width: 350,
        defaults: {width: 200},
        defaultType: 'textfield',
        floating: true,
        shadow: 'drop',
        shadowOffset: 15,
        monitorValid: true,
        buttonAlign: 'left',

        items: [{
                fieldLabel: 'User Name',
                id: 'UserName',
                name: 'UserName',
                allowBlank: false,

                maxLength: 50
            },{
                fieldLabel: 'Password',
                id: 'Password',
                name: 'Password',
                inputType: 'password',
                maxLength: 20
            }, new Ext.form.Checkbox({

                fieldLabel: '',
                labelSeparator: '',
                id: 'RememberMe',
                name: 'RememberMe',
                boxLabel: 'Remember Me?',
                style: 'margin-right: 8px',
                checked: getCookie('REMEMBERME') == "true" ? true : false
            })],

        fbar: tb

要执行点击,您只需调用登录按钮元素上的 Click 方法,如下所示:

Call HTMLDoc.all.Logon.Click

但是,问题是,该网站只有在您输入用户名和密码后才会启用该按钮。如果您尝试在填写用户名和密码后立即点击按钮,这为时过早,按钮仍处于禁用状态,您需要稍等片刻。

为了在VBA等待,可以像这样导入WinAPI Sleep函数:

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

然后像这样等待给定的毫秒数:

Sleep (500)

合并代码:

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub Demo()
  Dim MyURL As String
  Dim MyBrowser As InternetExplorer
  Dim HTMLDoc As HTMLDocument

  MyURL = "https://www.oms.itradenetwork.com/secure/login/logon.cfm"
  Set MyBrowser = New InternetExplorer
  MyBrowser.Silent = True
  MyBrowser.Navigate MyURL
  MyBrowser.Visible = True

  Do
    DoEvents
  Loop Until MyBrowser.ReadyState = READYSTATE_COMPLETE

  Set HTMLDoc = MyBrowser.Document
  HTMLDoc.all.UserName.Value = "MyName"
  HTMLDoc.all.Password.Value = "MyPassword"

  ' First wait 500ms to give the webite enough time to enable the button
  Sleep (500)
  ' then click the button
  Call HTMLDoc.all.Logon.Click
End Sub