【问题标题】:how to click a link in IE using excel VBA如何使用 excel VBA 在 IE 中单击链接
【发布时间】:2018-02-24 14:20:16
【问题描述】:

我正在尝试编写一些代码,用于在 excel 单元格中查找单词,搜索该单词,最重要的是,单击返回的链接。

我已经关闭了搜索部分,但我正在努力点击链接。 HMTL 提取物是 -

<span>
<div class="searchResult webResult ">
<div class="resultTitlePane">
<h3>
<a class="outbound" href="whatever" target ="" rel="nofollow" rev="lots of 
text">..</a>
</h3>
</div>

我没有输入 href 和 rel 文本,但我只是希望能够单击返回的链接并继续访问该站点。 有什么帮助吗?

这是我的代码 -

Sub test()
Dim ie As InternetExplorer
Dim RegEx As RegExp, RegMatch As MatchCollection
Dim MyStr As String
Dim pDisp As Object
Dim dtStartTime As Date
Set ie = New InternetExplorer
Set RegEx = New RegExp
Dim iedoc As Object
SearchEng = "http://easysearch.org.uk/search/?s="

LastRow = Range("A1").End(xlDown).Row

Do Until i = LastRow + 1
    SearchMe = Range("A" & i)
    ie.Navigate SearchEng & SearchMe
    Do Until ie.ReadyState = READYSTATE_COMPLETE
    Loop

    MyStr = ie.document.body.innerText
    Set RegMatch = RegEx.Execute(MyStr)        

    If RegMatch.Count > 0 Then
        ie.Navigate RegMatch(0)
        Do Until ie.ReadyState = READYSTATE_COMPLETE
        Loop

        ie.Visible = True        
        Set iedoc = ie.document
        ''NEED TO ADD SOMETHING HERE TO CLICK LINK''

    End If

    i = i + 1
    Do Until ie.ReadyState = READYSTATE_COMPLETE
    Loop
Loop 
Set RegEx = Nothing
ie.Quit
Set ie = Nothing
End Sub

【问题讨论】:

  • HTML 代码不足以为您提供答案。在某些情况下,您可以使用类名来帮助您找到链接,但由于这是一个搜索结果,您将有许多具有相同名称的类名。 &lt;a class...&gt; 行的任何部分是否对搜索结果是唯一的?
  • 我去看看,如果它更容易,我只想搜索第一个结果。
  • 这可能会更容易。您能否发布您已经拥有的任何代码,以便我可以看到您卡在哪里并构建该代码?
  • 嗨,有人能帮忙吗?
  • 谢谢你的代码..我会看看它

标签: html vba excel ie-automation


【解决方案1】:

在您的代码中,您可以将占位符:''NEED TO ADD SOMETHING HERE TO CLICK LINK'' 替换为:

iedoc.getElementsByClassName("resultTitlePane")(0).getElementsByTagName("a")(0).Click

响应 OP's comment 的 readystate 未完成:

你可以继续使用你的readystate循环,然后循环实际对象直到它变得可用,然后点击它:

Do Until ie.ReadyState = READYSTATE_COMPLETE
Loop

ie.Visible = True        
Set iedoc = ie.document

' ^ ^ ^ ^ Already part of your code

Dim myBtn As Object
Set myBtn = Nothing

' Loop object while it's Nothing
On Error Resume Next
Do While myBtn Is Nothing
    DoEvents
    set myBtn = iedoc.getElementsByClassName("resultTitlePane")(0).getElementsByTagName("a")(0)
Loop
On Error GoTo 0

myBtn.Click

【讨论】:

  • 嗨,谢谢,但它看起来不起作用,它会循环遍历所有关键字,但实际上并没有在链接上跟进
  • 如果我通过代码 F8 并在此行停止,它可以工作,但否则,它是否需要某种暂停?我尝试了代码 Do Until ie.ReadyState = READYSTATE_COMPLETE Loop 但这似乎也不起作用
  • 如果您的 readystate 不起作用,那么您可以循环对象直到它准备好。我会在一秒钟内更新
  • 嗨,谢谢,但我又遇到了一个问题,它运行了一次,(但似乎没有打开链接)然后当它到达第二次时,它在 myBtn.Click 处出错/跨度>
  • 手动单步执行它是否仍然有效?您能在循环上方添加Msgbox ieDoc is Nothing 并告诉我它是对还是错?
猜你喜欢
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 2014-08-29
  • 1970-01-01
  • 2014-01-26
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多