简体   繁体   中英

Excel Macro To Pull Google Image Links

The goal is to get images from Google Images that match the part numbers in my database. My code runs, and it pulls up the correct Google pages but refuses to put the links into the spreadsheet. I have tried everything I can think of, but as of now, I keep on getting Error 1004 (Application-defined or Object-defined error).`

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

Notes on your code:

You need Option Explicit at the top of your code to check on variable declarations and typos amongst other advantages. There are a number of missing declarations eg result , and used ones later eg Set IE = CreateObject("InternetExplorer.Application") . You have two different variables (one late bound and one early) both creating IE instances. You only in fact use one.

Your current error may be down to you trying to work with an object here: result = aEle which won't work without the Set keyword to provide the required reference.

Without example URLs and expected output it is difficult to advise on the later loops in your code. You appear to have a duplicate loop over IMG elements but this time with some restrictions. It is likely these loops can be merged.


An example:

The following uses an arbitrary concatenation in to pull the img src links in from search results based on A2N0015C3KUU .

It uses a CSS selector combination of #ires img[src] to target elements with img tags and src attributes within the parent element with id ires (search results).

It is to demonstrate the principle of gathering aNodeList of matching elements and writing out to a sheet. The querySelectorAll method applied the CSS selector combination to the HTMLDocument and returns the nodeList. The nodeList is looped along its .Length , with items accessed by index starting at 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM