【问题标题】:How to Click an href using an Excel VBA如何使用 Excel VBA 单击 href
【发布时间】:2017-12-19 07:47:44
【问题描述】:

我对 VBA 非常陌生,并且有一个关于如何在 Internet Explorer 中单击 href 链接的问题。源页面上有多个href。我从来没有遇到过这种情况,这让我很难过!我在这个网站上寻找答案,但决定在这里问。

下面我列出了我所拥有的代码,直到我遇到问题,以及 Internet Explorer 上的源代码。

我注释掉了我尝试过的内容并列出了我收到的错误。

代码如下:

 Sub ()
Dim i As Long
Dim URL As String
Dim IE As Object
Dim objElement As Object
Dim objCollection As Object

User = "User"
Pwd = "Pwd"


Set IE = CreateObject("InternetExplorer.Application")

IE.Visible = True

URL = "URL.com"

IE.Navigate URL

Do While IE.ReadyState <> 4
  DoEvents
Loop

  IE.Document.getElementById("txtUsername").Value = User
  IE.Document.getElementById("txtPassword").Value = Pwd
  IE.Document.getElementById("btnSubmit").Click


  'IE.getElementByClassName("txtTerms").Click - Runtime Error 438
  'IE.getElementByTagName("Claims Management").Click - Runtime Error 438

'Set HREF = IE.Document.getElementsByClassName("txtTerms")
    'For Each HREF In IE.Document.getElementsByTagName("Claims").Click  - No error occurs, nothing happens.

End Sub

Internet Explorer 源代码:

<table id="tblContent">
<tr>
<td class="txtTerms"><a href='href url 1'>Claims</a>

<br>Download<br>Create<br><a class='terms' href='href url 2' 
 target='terms'>Terms</a><br><br></td>
</tr>

我的问题是,如何让 VBA 只点击“href url 1”?

如果需要任何其他信息,请告诉我。对于我的 VBA 水平,我深表歉意,但我很高兴能了解更多信息!

感谢您的帮助!

【问题讨论】:

  • 请参阅this answer 以获得一些指导。
  • 感谢大牛的指导!那是非常非正式的,我很感激。但是,我忘了提到“href url 1”和“href url 2”不是静态的,每次登录时都会发生变化。有没有使用/尝试不同方法单击“href url 1”的不同方法?
  • 如果你想要的是每次打开网站时的第一个和第二个href,你可以在循环中放置一个计数器i=i+1,然后在i=1If i = 1 Then Exit For退出循环时

标签: vba excel internet-explorer href excel-2013


【解决方案1】:

在 HTML 中,href&lt;a&gt;(链接)类型的属性,其中包含绝对或相对路径。 例如:

<a href="/questions/">Questions</a>

... 将显示为“问题”,如果您单击它,则会将您带到 www.stackoverflow.com/questions/。请注意,由于路径是相对的,因此已自动添加“www.stackoverflow.com”。

<a href="https://www.facebook.com">Facebook</a>

... 将显示为“Facebook”,如果您单击它,则会将您带到 www.facebook.com。在这种情况下,路径是绝对的。

虽然您的 HTML 代码不完整,但我想您要导航的所有链接都包含在具有 id="tblContent"table 中。如果是这种情况,那么您可以获取该表中的所有链接(tagName == 'a') 并将值存储在集合中:

Dim allHREFs As New Collection
Set allLinks = IE.Document.getElementById("tblContent").getElementsByTagName("a")
For Each link In allLinks
    allHREFs.Add link.href
Next link

然后您可以决定导航它们并一一做您必须做的事情:

For j = 1 To allHREFs.Count
    IE.Navigate URL + allHREFs(j) '<-- I'm assuming hrefs are relative.
    'do your stuff here
Next href

【讨论】:

  • 抱歉回复晚了。但下面是成功“单击”href 的代码。我感谢我能得到的所有帮助,这真的很有帮助!!谢谢你。 Set html = ie.Document Set ElementCol = html.getElementsByTagName("a") For Each link In ElementCol If link.innerHTML = "Claims Management" Then link.Click Exit For End If
猜你喜欢
  • 2020-01-14
  • 1970-01-01
  • 1970-01-01
  • 2019-02-14
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
相关资源
最近更新 更多