我正在尝试使用 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
我一直在尝试使用 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