Что происходит в кэше IE во время выполнения

631
Greedo

Я пишу сценарий в 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 говорит, что это так, но на самом деле они не такие супер- пользователи, как вы, ребята. И я планирую запустить это программное обеспечение на машинах других людей, поэтому я хочу проверить, следует ли мне избавиться от этого, чтобы оно было передано другим людям.
    • Я чувствую, что нет необходимости загружать все это в первую очередь
  • Наконец, чисто из интереса, для чего все файлы загружаются / создаются в любом случае?
1

0 ответов на вопрос