При помощи этого макроса вы можете скачать текст с выбранной страницы веб-сайта:
Sub ЗагрузкаТекстаВебСтраницы() Set IE = CreateObject("InternetExplorer.Application"): ' загружаем браузер Internet Explorer On Error Resume Next addr$ = "http://excelvba.ru/services" ' указываем адрес сайта (веб-страницы), текст которой загружаем IE.Navigate addr$ ' загружаем сайт While IE.busy Or (IE.readyState <> 4): DoEvents: Wend ' ждем, пока загрузится страница ' Set ieDoc = IE.Document ' ссылка на открытый документ txt$ = IE.Document.body.innerText ' считываем текст веб-страницы в текстовую переменную '[a1] = txt$ ' помещаем текст веб-страницы на лист Excel IE.Quit: Set IE = Nothing ' закрываем браузер MsgBox txt$, vbInformation, "Текст веб-страницы " & addr$ ' выводим сообщение с текстом с сайта End Sub
То же самое - но в виде функции:
Function WebPageText(ByVal sURL As String) As String On Error Resume Next Set IE = CreateObject("InternetExplorer.Application"): ' загружаем браузер Internet Explorer IE.Navigate sURL ' загружаем сайт While IE.busy Or (IE.readyState <> 4): DoEvents: Wend ' ждем, пока загрузится страница WebPageText = IE.Document.body.innerText ' считываем текст веб-страницы IE.Quit: Set IE = Nothing ' закрываем браузер End Function
Если же нужен HTML код страницы, то используйте такой вариант
' создаём объект IE Set IE = CreateObject("InternetExplorer.Application") ' переходим по ссылке в браузере IE.Navigate URL ' ждём, пока страница загрузиться While IE.Busy Or (IE.ReadyState <> 4): DoEvents: Wend ' считываем HTML код веб-страницы в текстовую переменную Code$ = IE.Document.body.innerHtml
Пример использования этой функции для загрузки текста страниц из интернета:
Sub ПримерИспользованияФункции_WebPageText() ' считываем текст страницы <a href="http://excelvba.ru/services" title="http://excelvba.ru/services">http://excelvba.ru/services</a> в переменную txt txt = WebPageText("http://excelvba.ru/services") ' получаем путь к папке "Рабочий стол" ПутьКРабочемуСтолу = CreateObject("WScript.Shell").SpecialFolders("Desktop") ' сохраняем текст из переменной txt в файл PageText.txt на рабочем столе SaveTXTfile ПутьКРабочемуСтолу & "\PageText.txt", txt ' открываем созданный текстовый файл в Excel Workbooks.OpenText ПутьКРабочемуСтолу & "\PageText.txt", , , xlDelimited End Sub Function SaveTXTfile(ByVal filename As String, ByVal txt As String) As Boolean On Error Resume Next: Err.Clear Set fso = CreateObject("scripting.filesystemobject") Set ts = fso.CreateTextFile(filename, True) ts.Write txt: ts.Close SaveTXTfile = Err = 0 Set ts = Nothing: Set fso = Nothing End Function
PS: Если вас интересует ИСХОДНЫЙ КОД страницы - используйте эту функцию: http://excelvba.ru/code/GetHTTPResponse
Комментарии
Максим, открывать ссылку в браузере, и загружать содержимое страницы с использованием разных браузеров, — разные вещи.
Первое делается легко, второе - сложно, и только с установкой дополнительного ПО.
Добрый день. Подскажите пожалуйста, что нужно изменить, что б вместо IE открывать ссылки в другом браузере, не являющемся браузером по умолчанию, например в Chrome? Макросом буду открывать ссылки в разных браузеров, поэтому только для того, что по умолчанию- не подходит
Добрый день - использу ваш код для загрузки html страницы очень удобно спасибо Вам огромное. Но в последние дни проблемы с использованием кода на сайте https://rosreestr.ru/wps/portal/online_request вставляю эту страницу и проблемы возникают с тем что она не отгружает текст а только открывает ie и больше никаких действий, неделю назад все было хорошо. Я использовал макрос ЗагрузкаТекстаВебСтраницы. Подскажите с чем это может быть связано.
Да, можно и часть.
На сайте есть функция для поиска нужных тегов в html коде
Классные коды, огромное спасибо. А можно импортировать не всю страницу, а кусок? По тегам или еще как-нибудь
Переустанавливал, откатывал на старую версию, поставил винду 10 64 бит, и офис 16.
Возможно, IE криво установился или обновился. Попробуйте переустановить ИЕ
Function WebPageText не работает, ранее работала перестала после очередного пакета обновления виндоус7. Останавливается на строке
While IE.busy Or (IE.readyState <> 4): DoEvents: Wend
при этом страница в браузере открывается. если поставить
MsgBox IE.Document.body.innerText
При любом времени ожидания объект IE.Document пуст.
Если использовать http://excelvba.ru/code/GetHTTPResponse или https://excelvba.ru/code/FileQueryRange данные возвращаются. В чем проблема?
Меня интересует такой же вопрос: как загрузить содержимое текстового файла с этой страницы или сам файл
Огромное спасибо! То, что надо! Очень полезная в хозяйстве вещь!
Николай, да, можно, - только это будет уже совсем другой макрос.
Впрочем, у меня есть готовое решение для такой задачи, - всё будет работать в точности как вам надо:
http://excelvba.ru/programmes/Parser
И ссылки из выделенных строк возьмет из заданного столбца, и результат в те же строки выведет
Здравствуйте, отличный макрос (программа)! Подскажите пожалуйста, а можно сделать так, чтобы задавать диапазон ссылок (например: от А1 до А10) или выделять N-ое количество ссылок - макросы - выполнить и макрос их обрабатывает? И ещё, выводить содержимое ссылки не в новом документе, а в ячейке соседнего столбца? Понимаю, раскатал губу, своими запросами, не сочтите за наглость! Заранее благодарю за ответ...
Добрый день! возможно уже есть пример описания получения части данных со web-страницы, заключенных между определенными тегами, например ... и помещение их в ячейку
Как-то так:
Добрый день.
Вы писали:
"Как перебрать все вкладки (и получить URL открытых страниц и их содержимое), я знаю (делал)"
Не мог бы бы подсказать как?
Спасибо!
Андрей, тут подсказать не смогу
Как перебрать все вкладки (и получить URL открытых страниц и их содержимое), я знаю (делал)
А как узнать, какая из вкладок активная, тут сложнее (надо к самому приложению обращаться, или через WinAPI все вкладки проверять) - мне такого делать не приходилось, потому, посоветовать ничего не могу.
Здравствуйте.
Подскажите, пожалуйста, следующее
Есть несколько уже открытых web-страниц в ИЕ. Они в разных вкладках и в разных окнах.
Нужно обработать только активную в данный момент вкладку или окно.
Как средствами VBA определить какая(ое) из всех вкладок-окон в данный момент активны?
Спасибо
Альтернатива есть, - можно работать с сайтами без использования браузера
Например: http://excelvba.ru/code/gethttpresponse
Браузер, собственно, вообще не нужен, - просто изредка с ним удобнее работать (код проще)
PS: IE8, как и любой другой браузер, отлично работает с HTTPS
Проблема IE - только в том, что он тормозит, и может подвисать
(потому я, в своё парсере, IE стараюсь не использовать вообще)
Доброго Времени Суток Вам.
Подскажите, а есть альтернатива:CreateObject("InternetExplorer.Application")
Дело в том, что у меня XP sp2 = IE8, который в свою очередь не работает c https.
Сергей, ответил вам на почту
Здравствуйте. Очень нужна Ваша помощь. Есть база ссылок в Excel. База для интернет-магазина. Есть столбцы с названием, описанием ... ценой и ссылкой на сайт-донор. Нужно сделать так, чтоб макрос выполнял перебор этих ссылок и сравнивал цену в ячейке с ценой на сайте.
Можете мне в этом помочь?
Про какую программу речь?
В статье, где вы разместили комментарий, никакой программы нет.
Речь про надстройку «Парсер сайтов»? Если да, - можем настроить под заказ.
Заказы на парсер принимаются в таком виде: http://excelvba.ru/programmes/Parser/order
Скачал тестовую программу. Подскажите как сделать выгрузку списка компаний с сайта в таблицу ексель, и их контактов. Найти контакты возможно с других сайтов этих компаний, (поиск по названию компаний). Т.е. на сайте, где список компаний - там нет контактов, контакты есть на сайтах этих компаний, нужен поиск сайтов по названию компаний - переход и скачка контактов. Возможно это сделать через Данную программу? И как? Сайт, с которого нужен список компаний http://www.franchisee.su/catalog/s-p-avto-lyubye-zapchasti-na-lyubye-avt...
Большое спасибо!
Валентина, в функции SaveTXTfile найдите строку
и замените её на
Файл создавался пустой, т.к. было попытка сохранить его в кодировке ANSI, а на веб-странице присутствуют символы, недопустимые в этой кодировке.
После того, как строчку в коде поменяете, файл будет создаваться в кодировке UTF-16, - там все символы допустимы.
Добрый день!
Я пробую сохранить текст, а также код страницы https://www.discogs.com, но текстовый файл - пуст.
При этом текст в переменной txt есть.
Добрый день! хороший макрос. Но как загружать код не только страницы но и код элемента находящегося на странице?
Спасибо большое! получилось реализовать именно этим способом.
Здравствуйте, Max.
Возможно, поможет добавление паузы в код:
http://excelvba.ru/code/GetHTTPResponse#comment-2210
Ну или добавьте в код из этой статьи задержку в пару секунд.
(надо подождать, пока отработает редирект, и скрипт сформирует страницу результатов)
После строки
While IE.busy Or (IE.readyState <> 4): DoEvents: Wend ' ждем, пока загрузится страница
напишите
application.wait now + 2/86400 ' пауза 2 секунды
Спасибо Вам за сайт. Очень много полезной и качественной информации.
Столкнулся с проблемой урл: "http://nylottery.ny.gov/wps/portal/NumbersTracker?game=NUMBER"
Ни одним способом, найденным на сайте, не могу загрузить данные с сайта в excel (Copy-Past не в счет). Веб-запрос тоже результатов не дает.
Подскажите, возможно есть другие способы, или я что-то упускаю. Заранее спасибо.
Подозрение что не в той отправляется. Потому что от гугла приходит INVALID_REQUEST
Ну как не работает? Может, не в той кодировке ответ приходит?
Так в этом случае можно изменить кодировку файла
GetHTTPResponse на моей конфигурации не работает с русскими буквами в запросе. Т.е. Иркутск не проходит. Мне пришлось сделать транслитерацию, но это сократило количество корректных ответов от гугла на треть. Т.е. не решение
Здравствуйте, Дмитрий.
Во-первых, код работает и с вашей ссылкой (Excel 2010, Win XP, IE 7), но дело да\же не в этом.
По ссылке возвращается XML - зачем результат в ячейки помещать?
Есть 2 способа получить XML с сайта:
1) Получить исходный текст веб-страницы
2) Скачать результат как обычный файл
И у меня этот код ничего не возвращает запросом по адресу "http://maps.google.com/maps/api/geocode/xml?address=London&sensor=false"
Excel 2010, Win 7, IE 9
А запрос html из первоначального примера возвращает корректные данные. Возможно это потому что с гугла xml приходит?
А если в запросе London на Иркутск поменять?
Здравствуйте, Жека.
Использование браузера по-умолчанию в подобных макросах невозможно.
Браузеров много разных - соответственно, методы работы (программного взаимодействия) с ними сильно отличаются.
Придётся писать код для каждого отдельного браузера. (и получится не 5 строк кода, а в сотню раз больше)
Есть другой способ получить текст веб-страницы - использовать веб-запрос
(в этом случае можно обойтись вообще без макросов - этот запрос можно создать вручную, а настроить автообновление данных)
Ещё раз спасибо за Ваши программы. Возник вопрос :
Как переделать строку
Set IE = CreateObject("InternetExplorer.Application") ,
что бы загружался браузер по умолчанию, а не только InternetExplorer.
Спасибо за ответ.
Здравствуйте, Алексей.
Тут не получится дать универсальный совет - в каждом случае надо выдирать из текста различные данные.
Обычно я делаю это при помощи функции Split (для разделения текстовой строки на 2 части).
2 вызова этой функции - и нужные данные из огромного текста получены.
Кроме того, можно попробовать применить веб-запрос - в этом случае курс доллара можно получить без единой строки кода.
PS: У меня на сайте есть отдельный макрос для получения курса доллара на нужную дату.
Спасибо, все работает
Я вот полностью забираю текст с сайта, а потом функциями excel выбираю нужное
А вот как в макросе прописать так называемый парсинг, т.е. мне надо найти например курс доллара на конкретную дату
Спасибо Вам за ответ!
Видимо у меня что-то с настройками? Посмотрю.
Я делал аналогично - загнал в переменную адрес. Результатом было ''.
Огромное спасибо за совет, поискать по форуму "Планеты" - с лёту в поисковиках не нашел. Надо было быстро получить координаты. Сначала хотел воспользоваться json, но не смог добраться даже да текста. Надеюсь, на форуме найду.
Еще раз благодарю за очень оперативный ответ!
Здравствуйте, Антон.
Я взял вышеопубликованную функцию ЗагрузкаТекстаВебСтраницы,
в одной строке кода заменил адрес сайта:
И увидел сообщение с ожидаемым результатом.
Так что не знаю, в чем проблема, - у меня всё работает.
PS: Я бы на вашем месте поискал готовое решение - на форуме «Планеты Excel» встречал как-то 2 решения вашей задачи
(определение координат по адресу, путем парсинга XML с подобный веб-страниц)
Здравствуйте!
Спасибо за Ваш отличный сайт!
Я попытался воспользоваться кодом с этого примера.
Планировал прочитать текст со странички по адресу "http://maps.google.com/maps/api/geocode/xml?address=London&sensor=false"
Но в переменную от объект WebPageText = IE.Document.body.innerText ничего не записывается. Подскажите, в чем может быть проблема?
Если открывать линк в IE, то результат отображается.
Спасибо!
Спасибо.. Link.innerText - это то что нужно..А я в справке это свойство не нашёл.. Ещё раз спасибо..
Судя по результату, link.nameProp возвращает не надпись на ссылке, а что-то другое:
(я плохо ориентируюсь в объектной модели DOM)
Результат:
Насколько мне известно, для получение текста ссылки надо использовать свойство Link.innerText
Результат:
Спасибо..Всё получается.
А надпись на этой ссылке можно получить свойством link.nameProp ??
Спасибо за ответ..
В общем случае, после загрузки веб-страницы, надо обратиться к свойству Links веб-страницы:
Результат увидите в окне Immediate:
Хорошая програмка. Спасибо. А как можно загрузить с вэб-страницы гиперссылки?? Спасибо за ответ..
Отправить комментарий