英文:
Find first image in google and insert next to keyword
问题
我试图找到一个脚本,根据关键字插入第一张图片,例如,A1中的“Abelia chinensis Variegata”会找到该植物的图片并将其放在B1中。
我已经找到了下面的脚本。
尽管关键字位于列D中,但在A中的结果返回为零。
因此无法检查它是否满足我的需求。
我觉得我离成功很近,任何帮助将不胜感激。
Public Sub imagedownload()
Dim IE As InternetExplorer
Dim HTMLdoc As HTMLDocument
Dim imgElements As IHTMLElementCollection
Dim imgElement As HTMLImg
Dim aElement As HTMLAnchorElement
Dim n As Integer, I As Integer
Dim Url As String, url2 As String
Dim m, LastRow As Long
Dim furl As String
Sheets("one").Select
LastRow = Range("D" & Rows.Count).End(xlUp).Row
For I = 3 To LastRow
Url = "https://www.google.com/search?q=" & Cells(I, 4) & "&source=lnms&tbm=isch&sa=X&rnd=1"
Set IE = New InternetExplorer
On Error Resume Next
Sheets("one").Select
With IE
.Visible = False
.navigate Url 'sWebSiteURL
Do Until .readyState = 4: DoEvents: Loop
'Do Until IE.document.readyState = "complete": DoEvents: Loop
Set HTMLdoc = .document
Set imgElements = HTMLdoc.getElementsByTagName("IMG")
n = 1
For Each imgElement In imgElements
On Error Resume Next
If InStr(imgElement.src, sImageSearchString) Then
If imgElement.ParentNode.nodeName = "A" Then
Set aElement = imgElement.ParentNode
'Cells(n, 2).Value = imgElement.src
'Cells(n, 3).Value = aElement.href
If n = 2 Then
url2 = aElement.href 'imgElement.src
url3 = imgElement.src 'aElement.href
GoTo done:
End If
n = n + 1
End If
End If
Next
done:
furl = InStrRev(url2, "&imgrefurl=", -1)
furl = Mid(url2, 37, furl - 37)
Sheets("two").Select
'On Error Resume Next
Cells(I, 1) = furl
Set m = ActiveSheet.Pictures.Insert(furl)
With Cells(I, 1)
t = .Top
l = .Left
w = .Width
h = .Height
End With
With m
.Top = t
.Left = l
.ShapeRange.Width = w
.ShapeRange.Height = h
End With
Sheets("one").Select
IE.Quit
Set IE = Nothing
End With
Next
End Sub
希望是返回图片,即使与关键字D中的每个关键字不匹配。
英文:
Im trying to find a script that inserts the first image based on a keyword i.e. A1 "Abelia chinensis Variegata" finds a picture of the plant and puts it in B1
I have found the script below
Although the keyword is column D the results in A thy are returning zeros against each search
So unable to check if this does what i need it to.
I feel I'm so close, any help would be greatly appreciated.
Public Sub imagedownload()
Dim IE As InternetExplorer
Dim HTMLdoc As HTMLDocument
Dim imgElements As IHTMLElementCollection
Dim imgElement As HTMLImg
Dim aElement As HTMLAnchorElement
Dim n As Integer, I As Integer
Dim Url As String, url2 As String
Dim m, LastRow As Long
Dim furl As String
Sheets("one").Select
LastRow = Range("D" & Rows.Count).End(xlUp).Row
For I = 3 To LastRow
Url = "https://www.google.com/search?q=" & Cells(I, 4) & "&source=lnms&tbm=isch&sa=X&rnd=1"
Set IE = New InternetExplorer
On Error Resume Next
Sheets("one").Select
With IE
.Visible = False
.navigate Url 'sWebSiteURL
Do Until .readyState = 4: DoEvents: Loop
'Do Until IE.document.readyState = "complete": DoEvents: Loop
Set HTMLdoc = .document
Set imgElements = HTMLdoc.getElementsByTagName("IMG")
n = 1
For Each imgElement In imgElements
On Error Resume Next
If InStr(imgElement.src, sImageSearchString) Then
If imgElement.ParentNode.nodeName = "A" Then
Set aElement = imgElement.ParentNode
'Cells(n, 2).Value = imgElement.src
'Cells(n, 3).Value = aElement.href
If n = 2 Then
url2 = aElement.href 'imgElement.src
url3 = imgElement.src 'aElement.href
GoTo done:
End If
n = n + 1
End If
End If
Next
done:
furl = InStrRev(url2, "&imgrefurl=", -1)
furl = Mid(url2, 37, furl - 37)
Sheets("two").Select
'On Error Resume Next
Cells(I, 1) = furl
Set m = ActiveSheet.Pictures.Insert(furl)
With Cells(I, 1)
t = .Top
l = .Left
w = .Width
h = .Height
End With
With m
.Top = t
.Left = l
.ShapeRange.Width = w
.ShapeRange.Height = h
End With
Sheets("one").Select
IE.Quit
Set IE = Nothing
End With
Next
End Sub
The hope was to return an image even if wrong against each keyword in D
答案1
得分: 2
I've hacked away at your code and got it to work. It really needs a full re-write to be honest.
Please note: I've removed the need for a second sheet for testing purposes, but it should be fairly simple for you to put that back in.
Public Sub imagedownload()
' Your VBA code here
End Sub
I'm not sure what your code was doing, but it appeared to be looking for perhaps an old style URL make-up that Google no longer use. Note: the code above works today, but Google can change the way their search engine builds its pages at any time.
英文:
I've hacked away at your code and got it to work. It really needs a full re-write to be honest.
Please note: I've removed the need for a second sheet for testing purposes, but it should be fairly simple for you to put that back in.
Public Sub imagedownload()
Dim IE As InternetExplorer
Dim HTMLdoc As HTMLDocument
Dim imgElements As IHTMLElementCollection
Dim imgElement As HTMLImg
Dim aElement As HTMLAnchorElement
Dim n As Integer, I As Integer
Dim Url As String, url2 As String
Dim m, LastRow As Long
Dim furl As String
Sheets("one").Select
LastRow = Range("D" & Rows.Count).End(xlUp).Row
For I = 3 To LastRow
sImageSearchString = Cells(I, 4)
Url = "https://www.google.com/search?q=" & sImageSearchString & "&source=lnms&tbm=isch&sa=X&rnd=1"
Set IE = New InternetExplorer
On Error Resume Next
Sheets("one").Select
With IE
.Visible = True
.navigate Url 'sWebSiteURL
Do Until .readyState = 4: DoEvents: Loop
'Do Until IE.document.readyState = "complete": DoEvents: Loop
Set HTMLdoc = .document
Set imgElements = HTMLdoc.getElementsByTagName("IMG")
furl = ""
For Each imgElement In imgElements
On Error Resume Next
If furl = "" And InStr(imgElement.src, "gstatic") Then
furl = imgElement.src
End If
Next
Cells(I, 6) = furl
Set m = ActiveSheet.Pictures.Insert(furl)
With Cells(I, 5)
t = .Top
l = .Left
w = .Width
h = .Height
End With
With m
.Top = t
.Left = l
.ShapeRange.Width = w
.ShapeRange.Height = h
End With
IE.Quit
Set IE = Nothing
End With
Next
End Sub
Input:
Output:
I'm not sure what your code was doing, but it appeared to be looking for perhaps an old style URL make-up that Google no longer use. Note: the code above works today, but Google can change the way their search engine builds its pages at any time.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论