从网页中提取链接文本 - Visual Basic Excel

时间:2018-04-21 07:53:03

标签: excel vba excel-vba

快速上下文:我有一个基本的excel电子表格,其中包含三个字段:Client_URL,Client_Name和AHREFs_Rank。当在Client_URL中输入URL时,我想:

  1. 登录AHREF;
  2. 使用单元格Client_URL的值粘贴并输入客户端URL到Web表单字段中;
  3. 拉出AHREF的链接内部文本的排名。
  4. 我在第3步遇到了问题。

    这是目前使用的第3步的完整代码,我遇到了"编译错误:需要对象"的问题。

    Private Sub Worksheet_Change(ByVal Target As Range)
    
        If Target.Row = Range("Client_URL").Row And _
           Target.Column = Range("Client_URL").Column Then
    
            Dim HTMLDoc As HTMLDocument
            Dim MyBrowser As InternetExplorer
            Dim MyHTML_Element As IHTMLElement
            Dim MyURL As String
    
            MyURL = "https://ahrefs.com/user/login"
            Set MyBrowser = New InternetExplorer
            MyBrowser.navigate MyURL
            MyBrowser.Visible = True
    
            Do
            Loop Until MyBrowser.readyState = READYSTATE_COMPLETE
    
            Set HTMLDoc = MyBrowser.document
            HTMLDoc.all.Email.Value = "login@email.com"
            HTMLDoc.all.Password.Value = "password123"
    
            For Each MyHTML_Element In HTMLDoc.getElementsByTagName("input")
                If MyHTML_Element.Type = "submit" Then MyHTML_Element.Click: Exit For
            Next
    
            MyURL = "https://ahrefs.com/dashboard/metrics"
            MyBrowser.navigate MyURL
    
            Do
            Loop Until MyBrowser.readyState = READYSTATE_COMPLETE
    
            Set HTMLDoc = MyBrowser.document
            HTMLDoc.activeElement.Value = Range("Client_URL").Value
            HTMLDoc.getElementById("dashboard_start_analysing").Click
    
            Do
                DoEvents
            Loop Until MyBrowser.readyState = READYSTATE_COMPLETE
    
            Set HTMLDoc = MyBrowser.document
            Dim rankInnertext As Object
            rankInnertext = HTMLDoc.getElementById("topAhrefsRank").innerText
    
            MsgBox rankInnertext
    
        End If
    
    End Sub
    

    如果我删除" Set"来自" rankInnertext ="然后我得到运行时错误91"对象变量未设置"。

    要分解它,在步骤3中我已经:在前一页上提交了一个字段,我正在等待当前页面完成加载。然后,我尝试使用ID" topAhrefsRank"来拉取链接的内部文本。并设置单元格的值" AHREFs_Rank"将内部文本的值等于字符串。

      

    视觉基础非常新,所以感谢任何帮助。

         

    更新:根据建议更改了代码。已将rankInnertext从String更改为Object。现在接收"运行时错误91:对象变量或未设置块变量"

2 个答案:

答案 0 :(得分:0)

试试这个 - 你有错误吗?

    Dim rankInnertext '<< variant OK here
    rankInnertext = HTMLDoc.getElementById("topAhrefsRank").innerText
    MsgBox rankInnertext

答案 1 :(得分:0)

UPDATE!我设法通过强制VBA等待特定时间来确保所有页面脚本都已加载来解决此问题。出于某种原因,无论我如何等待页面加载,元素都不可用,因为它们是通过脚本加载的。

我按照以下代码强制执行时间延迟:

    Dim time1
    Dim time2

    time1 = Now
    time2 = Now + TimeValue("0:00:20")
     Do Until time1 >= time2
        DoEvents
        time1 = Now()
    Loop

现在正在msgbox中显示正确的值,因此我现在可以提取此数据并将其指定为Excel单元格的值,这正是我所追求的。

感谢所有回复的人 - 非常感谢!