在VBA中按类名获取图像src

时间:2016-12-26 11:45:55

标签: excel vba excel-vba

我正试图从页面获取大图像的网址

<ul id="etalage">
<li class=" product-image-thumbs" >
<img class="etalage_source_image_large" src="http://website.com/media/1200x1200/16235_1.jpg" title="" />
<img class="etalage_source_image_small" src="http://website.com/media/450x450/16235_1.jpg" title="" />
</li>
</ul>

我的vba代码是

Public Sub macro1()
Dim ie As Object
Dim name As String
Do Until IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Value = "RUNNING"
URL = Selection.Value
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Visible = 1
.navigate URL
While .Busy Or .readyState <> 4
DoEvents
Wend
End With
Dim Doc As HTMLDocument
Set Doc = ie.document
ActiveCell.Offset(0, 1).Value = "ERROR"
name = Trim(Doc.getElementsByClassName("product-image-thumbs")(0).innerText)
ActiveCell.Offset(0, 2).Value = name
ActiveCell.Offset(0, 1).Value = "successful"
ActiveCell.Offset(1, 0).Select
ie.Quit
Loop
End Sub

我的代码给出空格...

还请建议我如何更快地运行这个宏....我有3000个网址可供使用。

  

提前致谢

1 个答案:

答案 0 :(得分:1)

根据评论,尝试以这种方式加速代码(未经测试的代码)。 o.CardName LIKE N'%$lname%'元素的内部文本是空字符串,因为其中没有文本,有li元素但没有文本。 HTH

image

要使用Public Sub macro1() Dim ie As Object Dim name As String Dim Doc As HTMLDocument Set ie = CreateObject("InternetExplorer.Application") ie.Visible = 1 Do Until IsEmpty(ActiveCell) ActiveCell.Offset(0, 1).Value = "RUNNING" url = Selection.Value ie.navigate url While ie.Busy Or ie.readyState <> 4 DoEvents Wend Set Doc = ie.document ActiveCell.Offset(0, 1).Value = "ERROR" name = Trim(Doc.getElementsByClassName("product-image-thumbs")(0).innerText) ActiveCell.Offset(0, 2).Value = name ActiveCell.Offset(0, 1).Value = "successful" ActiveCell.Offset(1, 0).Select Loop ie.Quit End Sub 方法获取所有src尝试的images

querySelectorAll

请参阅CSS attribute selectors

编辑: 如果Dim img, imgs As IHTMLDOMChildrenCollection, i Set imgs = Doc.querySelectorAll("li[class~='product-image-thumbs']>img") For i = 0 To imgs.Length - 1 Set img = imgs.item(i) Debug.Print img.getAttribute("src") Next 元素中有更多img元素,那么您有更多可能获得正确的li.product-image-thumbs

  • 获取位于img
  • 之后的img

li

  • 按类名称<{1}}获取"li[class~='product-image-thumbs']+img"

img