1

Я пишу сценарий в 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

Перейдите на веб-страницу и дождитесь загрузки

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)

Прокрутка страницы

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 и 390 изображений, по сравнению с 400 результатами изображений на всей веб-странице.
  • Случайные проверки я сделали на этих изображениях в кэше сделал , показывает , что они были в результатах поиска IE (то есть, я мог бы найти их с помощью прокрутки вокруг результатов изображения, поэтому я предполагаю , что все изображения в кэше приходят непосредственно из результаты поиска IE. Но мои чеки не были исчерпывающими)

Я также прокрутил страницу вручную в течение этого времени

  • Это создало множество новых файлов .txt и других файлов. Он также загрузил больше изображений в кэш.
  • Для того, чтобы это было полезно, мне понадобится более систематический способ получить их в VBA.

Подсчет изображений

imgCount = currpage.getElementById("rg_s").getElementsByTagName("IMG").Length
  • Это вернуло 400 для данного поискового URL. Кэш содержал 375 изображений, которые выглядели как миниатюры из поиска, и несколько других логотипов и изображений значков.
  • Возможная причина расхождения заключается в том, что некоторые (обычно первые 10 или около того) миниатюр являются строками, закодированными в формате base 64, другие имеют 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 / остановить их создание
    • Этот ответ не касается их, равно как и подход Сиддхарта Раута. Я не могу удалить их с помощью CreateObject("Scripting.FileSystemObject") из-за проблем защиты, и все другие методы, которые я нашел, являются ручными и требуют щелчка по меню IE
    • Насколько это безопасно? Reddit говорит, что это так, но на самом деле они не такие супер- пользователи, как вы, ребята. И я планирую запустить это программное обеспечение на машинах других людей, поэтому я хочу проверить, следует ли мне избавиться от этого, чтобы оно было передано другим людям.
    • Я чувствую, что нет необходимости загружать все это в первую очередь
  • Наконец, чисто из интереса, для чего все файлы загружаются / создаются в любом случае?

0