Такой вопрос. Раньше для скачивания информации (текста) с отдельных страниц одного сайта пользовался стандартной функцией querytables.add. Макросом через поиск выбиралась нужная мне информация.
Сейчас на данном сайте ввели проверку браузера перед загрузкой страницы. В результате даже просто гиперссылки из ячеек перестали открываться, не говоря уже про url-запросы.
Но. Команда vba открыть ссылку в IE по-прежнему работает, особенно если задержку времени ставить на загрузку.
Вопросы: 1. Есть ли способ использовать дальше querytables напрямую или подобная защита капитальна?
2. Можно ли скопировать текст средствами навигации IE и вставить его в том же табличном формате, как это делал querytables? Если возможен, просьба прикинуть скрипт. Сам написал до момента копирования текста в стринг-переменную.
3. Возможен ли такой вариант... vba открывает страницу в IE, сохраняет на локальный диск в определенную папку, а затем делается запрос querytables к этой сохраненной на локальном диске странице? Если возможен, просьба прикинуть скрипт. Полностью. Сам я даже не знаю, как (и можно ли) сделать url-запрос к локальному лиску и как дать команду IE сохранить сайт в нужной директории.
Спасибо за помощь! Дополнительную информацию скину по запросу.
Использовать дальше querytables - вряд ли. Он не умеет передавать заголовки запроса. А вам без этого не обойтись.
средствами навигации IE и вставить его в том же табличном формате - ну если только вы вручную можете выделить в IE нужную таблицу, скопировать её, вставить в Excel, - и результат вас устроит Код будет в этом случае ужасный, сложный (выделить таблицу в IE непросто, наверное), - но теоретически возможно. Проще уж тогда веб-страницу в Word открывать, - там намного проще выделить и скопировать таблицу (но в Word тоже, наверное, не откроется сайт как надо)
> Возможен ли такой вариант... да, возможен причем, страницу можно открывать без использования IE - так быстрее, и заголовки ничто не мешает передать, как браузер
Спасибо. Все понятно, лучше в его развивать вариант номер 3.
Проверю, но почти уверен, что не через IE скачать страницу с сайта не выйдет. Так как первые 5 секунд открывается пустая страница с содержанием аля "checking yout browser...yout browser will recirect you to requesred content shortly... allow up to 5 sec". Думаю, все тут понятно))
Можно сразу 2 команды для меня прикинуть, пожалуйста? Считаем, что сайт уже о крыт в IE по команде vba.
1) сохранить страницу по адресу рабочий стол/папка ттт
а что сложного-то? здесь есть весь нужный вам код http://excelvba.ru/code/GetWebPageText только заменить в коде innerText на innerHTML (чтобы брался HTML код вместо текста)
2) сделать url-запрос функцией querytables.add
все делаете как раньше, только подсовывая путь к файлу вместо ссылки на сайт где ваш код? что конкретно не получается?
1. VBA открывает страницу в IE. Статус: сделано. С задержкой грузится нужная страница (адрес при этом может меняться!!!), но защита проверки браузера преодолена.
1.1. Можно ли сохранить в string измененный адрес страницы?
2. VBA дает инструкцию сохранить страницу как html в заданную папку под заданным именем. Статус: не сделано. Просьба помочь. (Для дальнейших шагов пока делал этот шаг вручную из IE через "сохранить как" и выбирал html без картинок... по-хорошему, макрос должен делать те же действия)
Приведенная в предыдущем ответе ссылка сохраняет текст или код html в текстовом файле на рабочем столе. Это наверно не совсем то. Требуется сохранение именно страницы в формате html, чтобы запустить шаг 3.
3. К сохраненной на локальном диске странице делается url-запрос функцией querytables.add. Статус: сделано. Раньше наверно не работало, т.к. в пути присутствовала кириллица.
4. Полученная в результате такого импорта в Excel таблица обрабатывается определенным образом Статус: сделано. Собственно, ради сохранения именно этой части макроса и придумывался этот алгоритм с "сохранить как". Просто много времени было потрачено на написание поиска и копирования нужной информации, хотя через обработку html кода в word может быть было и проще.
5. Сохраненная на локальном диске страница удаляется, чтобы не было захламления. Статус: не сделано. Пока не нашел команды.
Приведенная в предыдущем ответе ссылка сохраняет текст или код html в текстовом файле на рабочем столе. Это наверно не совсем то. Требуется сохранение именно страницы в формате html, чтобы запустить шаг 3.
А вам не приходила в голову идея поменять в коде расширение .txt на .html ? Попробуйте, - и, о чудо, сразу в нужном вам формате начнёт сохранять.
PS: формат HTML от формата TXT ничем абсолютно не отличается
Цитата
Можно ли сохранить в string измененный адрес страницы?
Извиняюсь, что пропал. Благодаря советам выше удалось реализовать техническое решение через IE, которым все это время и пользовался. Однако у него обнаружился существенный недостаток, который иногда приводит к необходимости "ручками" доделывать за макросом. Просьба подсказать решение проблемы.
1. "Идеальный мир". Через IE вручную сохранить страницу на локальный диск в формате "только HTML. Затем к сохраненной таким образом странице применяем QueryTables.Add. Все работает в 100% случаев. Но не хватает автоматизации.
Правильно понимаю, что макросом нельзя запускать в IE функцию "сохранить как"?