Страницы: 1
RSS
Скачивание zip архива через Internet Explorer НЕ по прямой ссылке
 

Добрый день, уважаемые форумчане! Вот уже неделю ломаю голову над механизмом, необходима помощь!

Делаю макрос для скачивания отчётов из внутренней системы отчетности компании.

Суть: пользователь выбрал список нужных отчетов, ввел параметры (на листе или в форму) – запустил макрос - заходим на сайт – (Начало цикла) кликаем нужный отчёт – вводим требуемые параметры – жмём Сформировать – ждём (от 10 сек до 30 мин в зависимости от объёма) – получаем выплывающее окно Internet Explorer “открыть/сохранить/отменить”- жмём открыть – видим скачанный архив, внутри файл Excel – открываем – переносим листы в нашу книгу (Конец цикла). И так циклом проходим по всем отчетам.

Отловить прямую ссылку на скачивание я не могу, там выполняется какой-то безумный JavaScript, в какой момент и куда он даёт ссылку выяснить не могу. Отдел ИТ у нас на столько поганый, что от них этой инфы добиться не получилось.

Изучив просторы интернета, я так поняла, что к окну Internet Explorer “открыть/сохранить/отменить” обратиться программно никак нельзя (а может всё-таки можно?). Поэтому я навожусь на последний элемент на странице и далее с помощью SendKeys "{TAB}" переключаюсь до нужной мне кнопки.

К сути проблемы – не могу продумать и реализовать механизм открытия книги excel из архива. Было три варианта:

1)      Нажимаю открыть -> Вижу архив -> SendKeys "{DOWN}{ENTER}" (навожусь на файл excel внутри архива, открываю). Если в этом месте кода поставить Breakpoint и потом продолжить выполнение  – всё открывается и далее никаких проблем. Но если брейка нет – книга открывается после выполнения макроса, что и логично. Пробовала вводить DoEvents, Wait, Sleep – безрезультатно. Насколько я понимаю данные команды останавливают не только сам макрос, но и excel, поэтому он ничего не может открыть. Есть ли какой-то программный аналог Breakpoint?

2)      Нажимаю открыть -> Вижу архив ->  SendKeys "{TAB}", SendKeys "{UP}", SendKeys "{TAB}", SendKeys "^{с}" (перехожу на предыдущий уровень, в врехней строке вижу путь, куда IE временно сохранил архив, копирую путь в буфер). Далее разархивирую чудесным макросом от the_Pirst -> открываю книгу через Workbooks.Open. На моём компе работает идеально, на соседнем в этом месте почему-то не срабатывает нажатие TAB (при этом tab в начале кода срабатывает в IE как надо, а в архиве работает UP, ENTER, но TAB ни в какую. Не программно, а реальным нажатием с клавиатуры tab работает)

3)      Нажимаю сохранить –> сохранение происходит по пути по умолчанию (если получится запустить это чудо – заставлю всех пользователей сделать один путь). Далее разархивирую чудесным макросом от the_Pirst -> открываю книгу через Workbooks.Open.  НО! Если файл с таким именем когда-то сохранялся (очень большая вероятность, т.к. большинство отчетов называются одинаково), то мой будет называться уже не «Отчет», а «Отчет (1)». Соот-но макрос выполнится без ошибок, но откроет старую книгу.

Буду благодарна за любые идеи, файл с кодом (написан вариант №2) прикладываю, он сильно черновой и пока заточен под одну конкретную выгрузку.

P/S/ Извините за сумбур, нет сил уже биться костылями с неизвестностью…

Изменено: Sasha0601 - 12.03.2018 18:41:54
 
Sasha0601, добрый!

Можно упростить себе жизнь, избавив от ненужных SendKey'ев:
1. Изучить запросы браузера в девелоперском режиме(клавиша F12)
2. Заказать работу, но, здесь вам придется довериться человеку и предоставить необходимые данные(запросы браузера, код html странички и прочее)
Почему 2, да потому что все зависит от самой веб странички. Можно и SendKey оставить.

По поводу распаковки, это можно сделать без WinRar. Штатным zip архиватором например, опять же без SendKey.
Программный брейкпоинт? Поставьте в нужное место кода оператор Stop.
 
Jungl,спасибо за ответ!
Пробовала я в "начале пути" в дев режиме отследить - ничего не поняла. Но присмотрюсь внимательнее
Заказать не наш вариант, кризис-экономия, все дела. Да и мне интересно в это углубиться
Stop не подходит, тк требует обязательного нажатия пользователем Run, а предполагается, что пользователь запустит макрос и уйдет пить чай, иначе смысла данной программы нет.  
 
Всем доброго дня!

Мне удалось-таки отловить прямую ссылку, но теперь встала другая проблема.

Если я не добавляю сайт в списки надежных/интрасетей, то функция URLDownloadToFile не работает, возвращает в результат ошибку -2146697210.

Если добавляю сайт в надежные, то при запуске макроса падает соединение с объектом IE, ошибка "Run-time error '-2147467259 (80004005)': Method 'Document' of object 'IWebBrowser2' failed"

Может быть кто-то знает как побороть?
Вопрос, конечно, не очень по теме. Товарищ Модератор, сообщите, если нужно создать новую  
 
Разрешила

В Свойства браузера - Безопасность - Интернет - Другой - Проверка подлинности пользователя - Вход - установить Автоматический вход в сеть с текущим именем пользователя и паролем. Explorer ругается, что это небезопасно, но работает.

Знает ли кто-то из-за какого параметра падает соединение с надежным сайтом или  Интрасетью? В остальном вопрос снят  
Страницы: 1
Наверх