我是新手,正在尝试从imdb.com网站上抓取宽高比详细信息。
我在You Tube上掠夺了一些代码,并使用inspect元素对其进行了修改。
该代码打开imdb并按标题运行搜索,但返回运行时错误438。
理想情况下,我希望它返回最上面的结果的html,以便我可以进一步单击最上面的结果,以浏览到具有技术细节的页面,从那里我可以获取长宽比信息并将其粘贴到单元格中。 / p>
不幸的是,我的Click指令失败了-甚至还没有提取纵横比信息。
有人可以看到我哪里出问题了吗?
非常感谢,
尼克
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = Range("Title").Row And Target.Column = Range("Title").Column Then
Dim ie As New InternetExplorer
ie.Visible = True
ie.navigate "https://www.imdb.com/find?ref_=nv_sr_fn&q=" & Range("Title").Value
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Dim doc As HTMLDocument
Set doc = ie.document
Dim sDD As String
doc.getElementsByTagName("a").Click
End If
End Sub
答案 0 :(得分:1)
因此,解决您的代码
Target.Address = Range("Title").Address
的较短版本a
标签元素。您需要第一个搜索结果a
标签元素。您可以使用CSS选择器组合来获取第一个搜索结果a
标签元素,如下所示。
我使用.result_text a
的CSS选择器组合来定位带有标签result_text
的父类a
中的元素。 .
是class selector。
此组合称为descendant selector。
使用Red October
表中的搜索词,这是CSS查询的第一个结果:
这是具有基本字符串https://www.imdb.com
的相对链接。
通过querySelector
方法应用意味着仅返回第一个匹配的结果,即最高结果。
VBA:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Address = Range("Title").Address Then
Dim ie As New InternetExplorer
ie.Visible = True
ie.navigate "https://www.imdb.com/find?ref_=nv_sr_fn&q=" & Range("Title").value
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Dim doc As HTMLDocument
Set doc = ie.document
doc.querySelector(".result_text a").Click
'other code
End If
Application.EnableEvents = True
End Sub
答案 1 :(得分:0)
这行代码:
Foo*
为您提供HTML文档中的超链接的集合。也就是说,它为您提供了与给定条件匹配的所有元素(如果有)。 但是,某些问题可能会出现:
可能没有任何超链接-因此没有要单击的元素。
您没有引用任何要单击的元素。如果要在找到的项目的集合中找到第一个,则可以按照建议使用索引。否则,您可能会寻找其他点击条件(例如其文字或其他给定属性)。
即使如此,例如,如果找到的元素被另一个元素遮盖,它也可能无法被浏览器单击。