Excel宏拉Google图像链接

时间:2018-09-25 14:45:44

标签: excel vba internet-explorer google-image-search

目标是从Google图片中获取与数据库中零件编号匹配的图片。我的代码运行了,它可以拉出正确的Google页面,但是拒绝将链接放入电子表格中。我已经尝试了所有可以想到的方法,但是到目前为止,我仍然不断遇到错误1004(应用程序定义的错误或对象定义的错误)。

Sub SearchBotGoogleImgLink()
Dim objIE As Object
Set IE = CreateObject("InternetExplorer.Application")
Dim HTMLdoc As HTMLDocument
Dim imgElements As IHTMLElementCollection
Dim imgElement As HTMLImg
Dim aElement As HTMLAnchorElement
Dim n As Integer
Dim i As Integer
Dim url As String
Dim url2 As String
Dim m As Long
Dim lastRow As Long
Dim url3 As String
Dim SearchRow As Long
Dim aEle As HTMLLinkElement


    Worksheets("Sheet1").Select
SearchRow = 1

Do Until IsEmpty(ActiveSheet.Cells(SearchRow, 1))
Sheets("Sheet1").Select
    Application.StatusBar = SearchRow - 1 & " of " & "4368" & " Items Done"
        Item = Trim(ActiveSheet.Cells(SearchRow, 1))
        url = "https://www.google.com/search?hl=en&biw=1600&bih=796&tbm=isch&sa=1&ei=CTOpW_2jO6nAjwT67rqACw&q=A2N0015C3KUU&oq=" & Cells(SearchRow, 1) & "&oq=A2N0015C3KUU&gs_l=img.12...0.0..1704...0.0..0.0.0.......1......gws-wiz-img.9wB6WwQJhwA"
        Set objIE = New InternetExplorer
        objIE.Visible = True
        objIE.navigate url
        Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
        For Each aEle In objIE.document.getElementsByTagName("IMG")
        result = aEle
            Sheets("Sheet1").Range(SearchRow & "C").Value = result
            Sheets("Sheet1").Range(SearchRow & "D") = aEle.innerHTML
            Sheets("Sheet1").Range(SearchRow & "F").Value = aEle.innerText
            Debug.Print aEle.innerText
    Next
Loop
'For i = 1 To lastRow
    'url = "https://www.google.com/search?hl=en&biw=1600&bih=796&tbm=isch&sa=1&ei=CTOpW_2jO6nAjwT67rqACw&q=A2N0015C3KUU&oq=" & Cells(SearchRow, 1) & "&oq=A2N0015C3KUU&gs_l=img.12...0.0..1704...0.0..0.0.0.......1......gws-wiz-img.9wB6WwQJhwA"

    Set HTMLdoc = objIE.document

    Set imgElements = HTMLdoc.getElementsByTagName("IMG")

    n = 1
    For Each imgElement In imgElements
        If InStr(ingElement.src, sImageSearchString) Then
            If imgElement.ParentNode.nodeName = "A" Then
                Set aElement = imgElement.ParentNode
                If n = 2 Then
                    url2 = aElement.href 'imgElement.src
                    url3 = imgElement.src 'aElement.href

                n = n + 1
                End If
            End If
        End If
    Next

    Cells(SearchRow, 5) = url2

 IE.Quit
 Set IE = Nothing
End Sub

1 个答案:

答案 0 :(得分:0)

代码注释:

您需要在代码顶部使用Option Explicit来检查变量声明和错别字以及其他优点。有许多遗漏的声明,例如result,并在以后使用,例如Set IE = CreateObject("InternetExplorer.Application")。您有两个不同的变量(一个晚绑定,一个早绑定)都创建了IE实例。实际上,您只使用一个。

您当前的错误可能归因于您尝试在此处使用对象:  result = aEle,如果没有Set关键字才能提供所需的参考,将无法正常工作。

没有示例URL和预期输出,很难在代码的后续循环中提出建议。您似乎在IMG元素上有一个重复的循环,但是这次有一些限制。这些循环很可能可以合并。


示例:

以下内容使用任意串联,从基于img src的搜索结果中提取A2N0015C3KUU链接。

它使用#ires img[src]的CSS选择器组合定位具有img标签的元素和ID为src的父元素中的ires属性(搜索结果)。

这是为了演示收集aNodeList个匹配元素并将其写到工作表的原理。 querySelectorAll方法将CSS选择器组合应用于HTMLDocument,并返回nodeList。 nodeList沿其.Length循环,索引访问的项从0开始。

Option Explicit
Public Sub GetInfo()
    Dim IE As New InternetExplorer
    With IE
        .Visible = True
        .navigate "https://www.google.com/search?hl=en&biw=1600&bih=796&tbm=isch&sa=1&ei=CTOpW_2jO6nAjwT67rqACw&q=A2N0015C3KUU&oq=1&%20%22&oq=A2N0015C3KUU&gs_l=img.12...0.0..1704...0.0..0.0.0.......1......gws-wiz-img.9wB6WwQJhwA"

        While .Busy Or .readyState < 4: DoEvents: Wend

        Dim aNodeList As Object, i As Long
        Set aNodeList = IE.document.querySelectorAll("#ires img[src]")
        For i = 0 To aNodeList.Length - 1
            ActiveSheet.Cells(i + 2, 4) = aNodeList.item(i).src
        Next
        'Quit '<== Remember to quit application
    End With
End Sub