单击vba中的按钮

单击vba中的按钮,vba,excel,web-scraping,Vba,Excel,Web Scraping,我能够创建我的vba代码登录到一个受密码保护的网站,但现在我被困在如何能够自动点击到我需要提取数据的地方。我无法共享该网站,但这是我尝试单击的html行。这是一个“报告”按钮,但我不能 这是我想点击按钮的html代码 <a href="gso_list_etrader_reports?vsCurrUser=2753" class="menuitem">Reports</a> 这是网站和登录/密码的代码,点击登录到目前为止工作正常,下一步是点击报告

我能够创建我的vba代码登录到一个受密码保护的网站,但现在我被困在如何能够自动点击到我需要提取数据的地方。我无法共享该网站,但这是我尝试单击的html行。这是一个“报告”按钮,但我不能

这是我想点击按钮的html代码

    <a href="gso_list_etrader_reports?vsCurrUser=2753" 
     class="menuitem">Reports</a>

这是网站和登录/密码的代码,点击登录到目前为止工作正常,下一步是点击报告,通过excel中的web查询提取数据。非常感谢您的帮助。谢谢

Dim HMTLDoc As HTMLDocument
Dim MyBrowser As InternetExplorer
Sub daily()
'
' daily Macro
'

 Dim MyHTML_Element As IHTMLElement
    Dim MYURL As String
    On Error GoTo Err_Clear

    '  website
    MYURL = ""
    Set MyBrowser = New InternetExplorer
    MyBrowser.Silent = True
    MyBrowser.navigate MYURL
    MyBrowser.Visible = True
    Do
    Loop Until MyBrowser.readyState = READYSTATE_COMPLETE
    Set HTMLDoc = MyBrowser.document
    ' user login and password
    HTMLDoc.all.user_login.Value = ***
    HTMLDoc.all.user_password.Value = ***
    For Each MyHTML_Element In HTMLDoc.getElementsbyTagName("input")
    'click submit to login
    If MyHTML_Element.Type = "submit" Then MyHTML_Element.Click: Exit For
    Next

 'gives debug error***   If MyHTML_Element.Type = "Reports" Then MyHTML_Element.Click: Exit For
    Next


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


End Sub
Dim HMTLDoc作为HTMLDocument
将MyBrowser设置为InternetExplorer
副刊()
'
“每日宏
'
将MyHTML_元素设置为IHTMlement
将MYURL设置为字符串
错误时转到错误清除
"网站
MYURL=“”
设置MyBrowser=New InternetExplorer
MyBrowser.Silent=True
MyBrowser.navigate MYURL
MyBrowser.Visible=True
做
循环,直到MyBrowser.readyState=readyState\u完成
设置HTMLDoc=MyBrowser.document
'用户登录名和密码
HTMLDoc.all.user\u login.Value=***
HTMLDoc.all.user\u password.Value=***
对于HTMLDoc.getElementsbyTagName(“输入”)中的每个MyHTML_元素
'单击“提交”登录
如果MyHTML\u Element.Type=“submit”,则MyHTML\u Element.Click:退出以获取
下一个
'给出调试错误***如果MyHTML\u Element.Type=“Reports”那么MyHTML\u Element.Click:退出
下一个
错误清除:
如果错误为0,则
呃,明白了
下一步继续
如果结束
端接头
请求我尝试单击的站点的html,我希望宏单击“报告”按钮

交易商之家| 交易| 报告

按F5键时不起作用,但按F8键时起作用的新代码:

作为HTMLDocument的Dim HMTLDoc 将MyBrowser设置为InternetExplorer 副德尔马瓦尤日报() ' “Delmarva_每日宏” "

将MyHTML_元素设置为IHTMlement 将MYURL设置为字符串 错误时转到错误清除

' website
MYURL = ***
Set MyBrowser = New InternetExplorer
MyBrowser.Silent = True
MyBrowser.navigate MYURL
MyBrowser.Visible = True
Do
Loop Until MyBrowser.readyState = READYSTATE_COMPLETE
Set HTMLDoc = MyBrowser.document
' user login and password
HTMLDoc.all.user_login.Value = ***
HTMLDoc.all.user_password.Value = ***
' click submit
For Each MyHTML_Element In HTMLDoc.getElementsbyTagName("input")

If MyHTML_Element.Type = "submit" Then MyHTML_Element.Click: Exit For
Next
' click reports
HTMLDoc.getElementsByClassName("menuitem")(1).Click
While MyBrowser.Busy Or MyBrowser.readyState < 4: DoEvents: Wend
'click Billing Analysis Report (Industrial)
HTMLDoc.getElementsByClassName("firstlink")(0).Click
While MyBrowser.Busy Or MyBrowser.readyState < 4: DoEvents: Wend
For Each MyHTML_Element In HTMLDoc.getElementsbyTagName("input")

If MyHTML_Element.Type = "submit" Then MyHTML_Element.Click: Exit For
Next
”网站
MYURL=***
设置MyBrowser=New InternetExplorer
MyBrowser.Silent=True
MyBrowser.navigate MYURL
MyBrowser.Visible=True
做
循环,直到MyBrowser.readyState=readyState\u完成
设置HTMLDoc=MyBrowser.document
'用户登录名和密码
HTMLDoc.all.user\u login.Value=***
HTMLDoc.all.user\u password.Value=***
'单击提交
对于HTMLDoc.getElementsbyTagName(“输入”)中的每个MyHTML_元素
如果MyHTML\u Element.Type=“submit”,则MyHTML\u Element.Click:退出以获取
下一个
'单击报告
HTMLDoc.getElementsByClassName(“menuitem”)(1)。单击
当MyBrowser.Busy或MyBrowser.readyState<4:DoEvents:Wend时
'单击计费分析报告(工业)
HTMLDoc.getElementsByClassName(“firstlink”)(0)。单击
当MyBrowser.Busy或MyBrowser.readyState<4:DoEvents:Wend时
对于HTMLDoc.getElementsbyTagName(“输入”)中的每个MyHTML_元素
如果MyHTML\u Element.Type=“submit”,则MyHTML\u Element.Click:退出以获取
下一个
错误清除: 如果错误为0,则 呃,明白了 下一步继续 如果结束

端接头

If MyHTML_Element.Type = "submit" Then MyHTML_Element.Click: Exit For

If MyHTML_Element.Type = "submit" Then 
    MyHTML_Element.Click
End If
Exit For
…这可能不是你想做的

“Reports”似乎不是有效的元素类型,所以也许您应该发布一些HTML

If MyHTML_Element.Type = "submit" Then 
    MyHTML_Element.Click
End If
Exit For
…这可能不是你想做的


“Reports”似乎不是有效的元素类型,因此您应该发布一些HTML。

报告按钮:

a[href='gso_list_etrader_reports?vsCurrUser=2753']
您可以尝试以下CSS选择器以感兴趣的元素为目标:

HTLMDoc.querySelector("a[href='gso_list_etrader_reports?vsCurrUser=2753']").Click
或者按类名称选择更传统的元素:

HTMLDoc.getElementsByClassName("menuitem")(1).Click
或者按标签(如果确实只有2个
a
标签!)


CSS选择器:

a[href='gso_list_etrader_reports?vsCurrUser=2753']
正在查找具有
a
标记且其值为的属性
href
的元素
gso\u列表\u etrader\u报告?vsCurrUser=2753


对HTML示例的CSS查询:

a[href='gso_list_etrader_reports?vsCurrUser=2753']


提交按钮:

a[href='gso_list_etrader_reports?vsCurrUser=2753']
对于代码的其余部分:您可以使用以下方法避免在单击输入按钮时出现循环,具体取决于您有多少个提交输入按钮

HTLMDoc.querySelector("input[type=submit]").Click
您也可以使用

HTMLDoc.forms(0).submit 

每次点击后提交:
您希望在myBrowser.Busy或myBrowser.readyState<4:DoEvents:Wend每次单击后|提交事件,以留出页面事件发生的时间;并减少在元素出现在页面上之前尝试选择该元素而找不到该对象的可能性。

报告按钮:

a[href='gso_list_etrader_reports?vsCurrUser=2753']
您可以尝试以下CSS选择器以感兴趣的元素为目标:

HTLMDoc.querySelector("a[href='gso_list_etrader_reports?vsCurrUser=2753']").Click
或者按类名称选择更传统的元素:

HTMLDoc.getElementsByClassName("menuitem")(1).Click
或者按标签(如果确实只有2个
a
标签!)


CSS选择器:

a[href='gso_list_etrader_reports?vsCurrUser=2753']
正在查找具有
a
标记且其值为的属性
href
的元素
gso\u列表\u etrader\u报告?vsCurrUser=2753


对HTML示例的CSS查询:

a[href='gso_list_etrader_reports?vsCurrUser=2753']


提交按钮:

a[href='gso_list_etrader_reports?vsCurrUser=2753']
对于代码的其余部分:您可以使用以下方法避免在单击输入按钮时出现循环,具体取决于您有多少个提交输入按钮

HTLMDoc.querySelector("input[type=submit]").Click
您也可以使用

HTMLDoc.forms(0).submit 

每次点击后提交:
您希望在myBrowser.Busy或myBrowser.readyState<4:DoEvents:Wend每次单击后|提交事件,以留出页面事件发生的时间;并减少在元素出现在页面上之前尝试选择该元素而找不到该对象的可能性。

您有两个
Next
,每个
只有一个
。此外,那些单行
If
可能没有达到您的预期效果。@Qharr如果字符限制不允许,我该如何发布html?@Qharr我收到一个错误“您的帖子似乎包含格式不正确的代码。请使用“代码”工具栏b将所有代码缩进4个空格