Я пишу сценарій в Excel VBA, щоб отримати ескізи від пошуку зображень Google. Намагаючись з'ясувати, як очистити тимчасові файли, зроблені в цьому автоматичному пошуку, я натрапив на INetCache
каталог.
Подальше копання показує, що ця папка (зокрема Low\IE
підкаталог) містить величезну завантаженість зображень - деякі з них є ескізами зображень, самі файли яких я завантажував трудомістко через vba і вже присутні. Тому я вирішив розслідувати далі, налагоджуючи коди крок за кроком і бачачи, що вискочило в моєму InetCache\Low\IE
і коли. Я збираюся пройти через мої результати і сподіваюся отримати відповіді
- Що означають результати
- Чи можу я скористатися цими файлами, а не завантажувати їх двічі (один раз в кеш, один раз з програмою VBA)
- Як я повинен очистити цей безлад від VBA
NB Інтернет говорить мені, що ця папка знаходиться в різних місцях залежно від вашої системи; моя є %localAppData%\Microsoft\Windows\INetCache\Low\IE
з Win10 IE11, але досить надійний спосіб дістатися до нього є тип
?CreateObject("Shell.Application").Namespace(32).self.path
у безпосереднє вікно vba. Всі файли захищені системними файлами так повинні бути видимими
Мої результати
Ось що я знайшов з'явився в INetCache\Low\IE
папки, як я запустив мій VBA код. Я розпочав перейменування існуючої папки на oldIE
Запустіть браузер
Set objIE = New InternetExplorer 'requires referencing Microsoft Internet Controls
- Новий
IE
створена порожня папка
Зробити браузер видимим
objIE.Visible = True
- Новий
container.dat
файл, створений усерединіIE
Перейдіть до веб-сторінки & amp; чекати навантаження
objIE.Navigate "https://www.google.com/search?q=cookies&safe=off&tbs=isz:ex,iszw:1366,iszh:768&tbm=isch&source=lnt"
'google images search for "cookies"
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 'wait for load
- 4 Нові вкладені папки, створені за допомогою 8-ти буквено-цифрових імен
- Вони містять кілька загальних іконок (Chrome, FB, twitter), хоча в одному міститься ескіз першого результату зображення (назва
images[1].jpg
)
Page Scroll
Google запускає деякі Ajax
скрипт для завантаження більшої кількості зображень під час прокручування вниз. Мій метод полягає в тому, щоб прокрутити вниз, поки не з'явиться кнопка "отримати більше результатів"; це має означати, що завантажена вся сторінка об'єктів зображення (хоча їхні ескізи / рядки ще не присутні).
Set currpage = objIE.Document
Set myDiv = currpage.getElementById("fbar") 'this is the load more images button
Do Until elemRect.bottom > 0 'scroll until myDiv is in view
currpage.parentWindow.scrollBy 0, 10000 'scroll by a big amount to trigger next part to load
Set elemRect = myDiv.getBoundingClientRect
Loop
- Всі 4 папки заповнюються зображеннями
- Ці образи або є
images[1-10].ext
іменування абоimages
слідом за алфавітно-цифровим рядком на 8 символів - Мені хотілося б дізнатися, чи існує шаблон, що стосується назви файлу / іншого властивості до його розташування на веб-сторінці, оскільки це дозволить мені використовувати ці зображення в програмі VBA
- До кінця сторінки повністю завантажується 375 jpgs & amp; Всього в кеші 390 зображень, порівняно з 400 зображеннями на всій веб-сторінці
- Ці образи або є
- Випадкові перевірки, які я робив на цих зображеннях у кеші, показали, що вони знаходяться в результатах пошуку в IE (тобто я можу їх знайти, прокрутивши результати зображення, тому я припускаю, що всі зображення в кеші робити приходять безпосередньо з результатів пошуку в IE. Але мої чеки не були вичерпними)
Протягом цього часу я також прокручував сторінку вручну
- Це створило нове навантаження
.txt
файли та інші файли. Він також завантажив більше зображень в кеш. - Для того, щоб це було корисним, мені знадобиться більш систематичний спосіб отримати їх у vba.
Підрахунок зображень
imgCount = currpage.getElementById("rg_s").getElementsByTagName("IMG").Length
- Це повернуло 400 для вказаної URL-адреси пошуку. Кеш містив 375 зображень, які виглядали як ескізи пошуку, а також декілька інших логотипів та зображень піктограм
- Можливою причиною невідповідності є те, що деякі (зазвичай перші 10 або більше) ескізи є базовими кодованими рядками, інші мають URL-адреси, можливо, лише ті, з URL-адресами кешуються (хоча це не виглядає так завжди)
Вихід з IE
objIE.Quit
- Це нічого не помітне для файлів в кеші
Нарешті, завантаження ескізів зображень
Public Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long) As Long
слідом за ними
fileurl = currpage.getElementById("rg_s").getElementsByTagName("IMG")(0).src
'returns thumbnail url of first image result
strFile = Environ("Temp") & "\Temp.jpg" 'place file in temp folder
ret = URLDownloadToFile(0, fileURL, strFile, 0, 0) 'fileurl is the web url, strfile is the save location
- Також нічого не робить для зображень в кеші
Що я хочу знати (TL; DR)
Це все добре і денді, але що я насправді просять?
Добре:
- Чи існує логіка іменування файлу зображення в кеші IE - або іншої властивості, яку я можу використовувати для відображення ескізів зображень в тому ж порядку, що і в пошуку в IE, використовуючи ці файли кешу?
- Якщо я дійсно не можу використовувати їх взагалі, тому що їх розташування / найменування є абсолютно непередбачуваним; Як я можу очистити їх від VBA / зупинити їх коли-небудь створюється
- Ця відповідь не доторкається до них, ні Підхід Siddharth Rout . Я не можу їх видалити
CreateObject("Scripting.FileSystemObject")
через проблеми із захистом, і всі інші методи, які я знайшов, є ручними і вимагають переходу за допомогою меню IE - Чи безпечно це робити? Reddit каже, що це так, але вони насправді не є Супер користувачі, як ви, хлопці. І я планую запустити це програмне забезпечення на машинах інших людей, тому я хочу перевірити, чи це те, від чого я повинен позбутися, щоб звільнити інших людей.
- Я відчуваю, що це непотрібно, щоб все це завантажувалося в першу чергу
- Ця відповідь не доторкається до них, ні Підхід Siddharth Rout . Я не можу їх видалити
- І, нарешті, чисто інтересно, які файли все-таки завантажені / створені?