Dim html as htmldocument

Загрузка кода страницы с сайта в эксель

Добрый день.
Есть задача: извлечь информацию с некоторых страниц из интернета.

Пользуюсь таким скриптом для передачи кода страницы в string:

sURL = "http://instagram.com/Ballantines_Russia" Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP") With oXMLHTTP .Open "GET", sURL, False .send Application.Wait Now + 5 / 86400 txt = .responseText End With Set oXMLHTTP = Nothing

Для некоторых сайтов он работает адекватно, с некоторыми -он не работает ( результат скрипта и результат просмотра браузером- различаются. Сайт не требует для просмотра нужной информации).

Попробовал другим методом- так же не получилось ( даже запрос разный-мне удобен код страницы, а второй алгоритм выдает текст со страницы):

Dim ieDoc As MSHTML.HTMLDocument Dim objCollectionIf As Object Set IE = CreateObject("InternetExplorer.Application") IE.Navigate sURL While IE.busy Or (IE.readyState <> 4) DoEvents Wend Set ieDoc = IE.Document Sheets(DM).Select ActiveSheet.Cells(2, 1) = ieDoc.innerHTML

Подскажите, каким способом лучше воспользоваться?
Во вложении- мой скрипт и результат его работы. Мне нужно увидеть, сколько followers-ов . В примере можно увидеть, что там этого значения нет

Если же метод позволит сначала логиниться, а потом получать код странички- то вообще замечательно.

Загрузка кода страницы HTTPS с сайта в эксель
Пользуюсь вот этим: Public Function GetHTTPResponse(ByVal sURL As String) As String On.

Извлечение данных с сайта и загрузка этих данных в эксель
Всем доброго суток. Вопрос такого плана. Есть подраздел на сайте. В качестве примера рассмотрим.

Загрузка исходного кода страницы
Я думаю все знают, что можно в браузере просматривать исходный код. Правой кнопкой мыши по.

Загрузка страницы сайта в txt документ
Здравствуйте, хотелось бы узнать можно ли с помощью c# скачать страницу с сайта в txt документ, а.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Sub GetInstagramStat() Dim sURL, oXMLHTTP As MSXML2.XMLHTTP, txt sURL = "http://instagram.com/Ballantines_Russia" Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP") With oXMLHTTP .Open "GET", sURL, False .send If .Status = 200 Then txt = .responseText Dim h As Long, p As Long, posts, followers, following p = InStr(1, txt, " posts", 1) h = InStr(p - 9, txt, """>", 1) + 2 posts = Mid(txt, h, p - h) p = InStr(1, txt, " followers", 1) h = InStr(p - 9, txt, """>", 1) + 2 followers = Mid(txt, h, p - h) p = InStr(1, txt, " following", 1) h = InStr(p - 9, txt, """>", 1) + 2 following = Mid(txt, h, p - h) End If End With Set oXMLHTTP = Nothing end Sub

P.S. Application.Wait лишнее, т.к. запрос у Вас не асинхронный и код все равно не перейдет на следующую строку, пока не получит результат от страницы. А вот проверять статус, чтобы убедиться в том, что страница загружена все же не помешает.

Читайте также:  Php генерация uuid v4

Дмитрий, привет.
Спасибо за ответ.
Задержку- убрал. Так даже быстрее.
Попробовал ваш скрипт- ругается на

Dim sURL, oXMLHTTP As MSXML2.XMLHTTP, txt

User-defined type not defined. Эта строка- объявление типов, и не обязательна ( как мне кажется). Без неё скрипт выполнился, но.

Проверил я ещё на одном компьютере.
И мой, и ваш скрипт- работают, но на одном из двух моих компьютеров. На обоих- win7, на одном IE8, на другом (на котором работает нормально) IE11.

Есть идеи- почему так может быть и как заставить работать стабильно?

Источник

Как получить содержание интернет страницы (позднее связывание)

Позднее связывание. Получить конкретное окно приложения
Здравствуйте все:) У меня такая проблема: пишу на c# библиотеку в которой содержится форма. На.

TNetHTTPClient. Как получить содержание переадресуемой страницы?
Пытаюсь простым способом NetHTTPClient1.Get(WWW,s); получить запрашиваемую интернет-страницу, но.

Позднее связывание
Доброго времени суток! В программе хочу применить механизм виртуальных функций, но его.

Позднее связывание
Не могу понять казалось бы простую вещь. Позднее связывание на этапе выполнения программы. Вот.

ЦитатаСообщение от boby104 Посмотреть сообщение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Public Function GetHTMLPageByURL(URL$) As String '-------------------------------------------------------------------- ' Функция возвращает тело переданной в URL страницы '-------------------------------------------------------------------- Dim oXMLHTTP As Object Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP") With oXMLHTTP .Open "GET", URL, False .send If .Status = 200 Then GetHTMLPageByURL = .responseText ' Тело HTML стр. 'Debug.Print GetHTMLPageByURL End If End With Set oXMLHTTP = Nothing End Function
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Public Function GetHTMLPageByURL2(URL$) As String Const READYSTATE_COMPLETE = 4 Dim IE As Object Dim html As Object Dim htmlBody As Variant Set IE = CreateObject("InternetExplorer.Application") 'IE.Top = 0 'IE.Left = 0 'IE.Width = 800 'IE.Height = 600 'IE.Visible = True IE.Visible = False IE.navigate URL$ 'Wait until IE is done loading page Do While IE.ReadyState <> READYSTATE_COMPLETE DoEvents Loop 'HTML document returned Set html = IE.Document GetHTMLPageByURL2 = html.DocumentElement.innerHTML 'IE.Visible = True IE.Quit Set IE = Nothing End Function

Добавлено через 12 минут
Честно:
Второй вариант сворован с сайта: www.cyberfor . ru
удалено модератором

Лучший ответ

Сообщение было отмечено Eugene-LS как решение

Решение

Eugene-LS,
Спасибо большое за оперативный ответ. Я использую вариант, как ваш первый, для получения текста интернет страницы,
но мне нужен объект htmldocument для дальнейшего парсинга страницы по тегам.

Ваш вариант номер два — отвечает моим потребностям, и его можно приспособить под мой проект, но он использует IE. Остается вопрос
htmlDocument и IE.Document — это одно и тоже. Или есть возможность создать htmlDocument , как объект и в дальнейшем его свойству body.innerHTML присвоить содержимое полученное через запрос «MSXML2.XMLHTTP», не запуская IE, или это невозможно?

Читайте также:  Soap envelope with php

Добавлено через 11 минут
по моему получилось так

Dim site AS String 'интернет адресс Dim s As String ' содержимое интернет страницы Dim o AS Object 'New WinHttp.WinHttpRequest Dim html As Object 'нужно переделать на позднее связывание SET o = CreateObject("WINHTTP.WinHTTPRequest.5.1") o.Open "GET", site, FALSE o.Send s = o.responseText Set html = CreateObject("htmlFile") html.body.innerHTML = s

ЦитатаСообщение от boby104 Посмотреть сообщение

Ваш вариант номер два — отвечает моим потребностям, и его можно приспособить под мой проект, но он использует IE. Остается вопрос
htmlDocument и IE.Document — это одно и тоже. Или есть возможность создать htmlDocument , как объект и в дальнейшем его свойству body.innerHTML присвоить содержимое полученное через запрос «MSXML2.XMLHTTP», не запуская IE, или это невозможно?

Если я правильно вас понял, — нет.
Вы получаете только текст HTML страницы с её относительными ссылками .
Отобразить её в локальном браузере будет невозможно без дополнительной сложной обработки.

Вот ещё:
Закачка файла по URL (API)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
'-------------------------------------------------------------------- ' Module : modDownloadURL ' Author : es ' Date : 06.05.2013 ' Purpose : Закачка файла по URL (API) '-------------------------------------------------------------------- Private 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 '-------------------------------------------------------------------- Public Function URLDownLoadOneFile(sFileURL As String, sLocalFilePath As String) As Boolean 'es - 05.05.2013 'Так оно ещё и работает с кешем Браузера! :) '-------------------------------------------------------------------- On Error GoTo URLDownLoadOneFile_Err URLDownLoadOneFile = URLDownloadToFile(0, sFileURL, sLocalFilePath, 0, 0) = 0 URLDownLoadOneFile_Bye: Exit Function URLDownLoadOneFile_Err: 'MsgBox "Error " & Err.Number & vbCrLf & Err.Description & vbCrLf & _ "in procedure TestDownLoadOneFile", vbCritical, "Error!" Resume URLDownLoadOneFile_Bye End Function
Private Sub URLDownLoadTest() Debug.Print URLDownLoadOneFile("http://msa.polarcom.ru/st/s0000061_Connection_Example_v01.zip", _ "D:\temp\Connection_Example_v01.zip") End Sub

Лучший ответ

Сообщение было отмечено Eugene-LS как решение

Решение

ЦитатаСообщение от Eugene-LS Посмотреть сообщение

Еще раз спасибо, мне как раз и не нужно отображать в браузере, а наоборот получить из интернета
объект типа htmlDocument, распарсить его по тегам и записать найденное в базу данных. Решение
в моем случае найдено

Set html = CreateObject("htmlFile") html.body.innerHTML = s

ЦитатаСообщение от boby104 Посмотреть сообщение

а наоборот получить из интернета
объект типа htmlDocument, распарсить его по тегам и записать найденное в базу данных. Решение
в моем случае найдено

Читайте также:  Дата и время

А ясно — что то вроде этого:
Импорт курса валюты с сайта ЦБ РФ
По материалам: http://www.cyber. 116.html

?GetCurrencyRate("EUR") ?GetCurrencyRate("USD") ?GetCurrencyRate("EUR", #01/01/2018#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
Public Function GetCurrencyRate(sCurrencyName As String, Optional vDate As Variant = Null) As Currency ' Курс берётся по адресу http://www.cbr.ru/currency_base/D_print.aspx?date_req=dd.mm.yyyy '-------------------------------------------------------------------------- 'Аргументы: ' sCurrencyName = Трёх буквенное обозначение валюты "USD", "EUR" и т.п. ' vDate = Опционально Дата на которую - по умолчанию = Текущаяя '-------------------------------------------------------------------------- Dim sURI As String, oHttp As Object, HTMLcode, OutStr As String Dim sDate As String, m As String, y As String, divider As Currency Dim foundRate As String, foundCount As String Dim pLeft As Long, pRight As Long '-------------------------------------------------------------------------- On Error GoTo GetCurrencyRate_Err If IsNull(vDate) Then vDate = Date 'если дата не указана = Сегодня! sDate = Format(vDate, "dd\/mm\/yyyy\") sURI = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=" & sDate 'Debug.Print sURI Set oHttp = CreateObject("MSXML2.XMLHTTP") oHttp.Open "GET", sURI, False oHttp.Send HTMLcode = oHttp.ResponseText 'Debug.Print HTMLcode ' определяем начало строки с искомым кодом валюты pLeft = InStr(InStr(1, HTMLcode, sCurrencyName) + 3, HTMLcode, "") + Len("") ' выделяем число едениц за которое указана цена pRight = InStr(pLeft, HTMLcode, "Nominal>") foundCount = Mid(HTMLcode, pLeft, pRight - pLeft) ' между этими скобками находится цифра в виде строки, которая является количеством единиц валюты, преобразовываем в число divider = val(foundCount) ' ищем курс валюты pLeft = InStr(pRight, HTMLcode, "Value") + Len("/Value") pRight = InStr(pLeft, HTMLcode, "/Value") - 1 foundRate = Mid(HTMLcode, pLeft, pRight - pLeft) ' берём символы курса валюты между этих границ, преобразовываем в тип Double и делим на количество единиц валюты GetCurrencyRate = CCur(foundRate) / divider 'На некоторые валюты курс выставляется не кратный 1, поэтому делим на кратность курса GetCurrencyRate_End: On Error Resume Next Set oHttp = Nothing Exit Function GetCurrencyRate_Err: MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure GetCurrencyRate", vbCritical Err.Clear Resume GetCurrencyRate_End End Function

Eugene-LS, Еще раз спасибо.
Частная задачка была решена. теперь нужно работать еще и с другим сайтом.
Не хватает знаний по работе с html файлом.
В вашем последнем примере с сайта получается
html страница в формате строки.
вариант

SET o = CreateObject("WINHTTP.WinHTTPRequest.5.1") o.Open "GET", site, FALSE o.Send s = o.responseText Set html = CreateObject("htmlFile") html.body.innerHTML = s

передает html страницу в переменную, как объект- html файл.
теперь с ним можно работать обращаясь напрямую к тегам.
типа

html.getElementsByTagName("tr")

Источник

Оцените статью