【发布时间】:2018-04-22 08:58:27
【问题描述】:
快速上下文:我有一个基本的 Excel 电子表格,其中包含三个字段:Client_URL、Client_Name 和 AHREFs_Rank。当在 Client_URL 中输入 URL 时,我想:
- 登录 AHREF;
- 使用单元格 Client_URL 的值将客户端 URL 粘贴并输入到 Web 表单字段中;
- 为链接的内部文本提取 AHREF 的排名号。
我在执行第 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
如果我从“rankInnertext =”中删除“设置”,则会收到运行时错误 91“未设置对象变量”。
为了分解它,在第 3 步中,我已经:在前一页提交了一个字段,并正在等待当前页面完成加载。然后,我尝试提取 ID 为“topAhrefsRank”的链接的内部文本,并将单元格“AHREFs_Rank”的值设置为等于作为字符串的内部文本的值。
Visual Basic 的新手非常感谢任何帮助。
更新:根据建议更改了代码。已将 rankInnertext 从 String 更改为 Object。现在收到“运行时错误 91:对象变量或未设置块变量”
【问题讨论】:
-
删除
set关键字,因为rankInnerText不是对象和测试。 -
您可能需要显示更多代码。可以分享网址吗?可能 HTMLDoc.getElementById("topAhrefsRank") 不正确或在调用时不可检索。
-
除了 shrivallabha.redij 已经建议的内容之外,您也可以像这样查看
Dim rankInnertext As Object : Set rankInnertext = HTMLDoc.getElementById("topAhrefsRank") : Msgbox rankInnertext.innerText的内容。确保退出semicolon并从那里开始newline。 -
嗨@SIM 我已经完全按照你的建议更新了代码,但是最后我收到了一个错误代码,例如“Msgbox rankInner.text.innerText”(错误 91 - 未设置对象变量“
-
嗨@shrivallabha.redij 如原始帖子中所述,删除
set时,错误从编译错误变为对象变量未设置错误。