Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получить HTML-код страницы, генерируемой javascript / 8 сообщений из 8, страница 1 из 1
07.06.2010, 23:10
    #36674320
Максим М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить HTML-код страницы, генерируемой javascript
Доброго времени суток!

Есть задача получения HTML кода сайта, которую я решаю следующим нехитрым способом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Public Function GetHTML(URL As String)
    Dim runReq As Object
    runReq.Open "GET", URL, False
    runReq.Send
    GetHTML = runReq.ResponseText
    Set runReq = Nothing
End Function

Однако недавно задача усложнилась: в HTML коде сайта попадаются следующие ссылки:

<A HREF="javascript://"
CLASS=PRICELISTS_MENU
onClick="showPricelists('80a73881b29aa19ad5524ab7ef3f9998', this); return false;"
onMouseOver="self.status = 'Архангельск'; return true;"
onMouseOut="hidePricelists(); self.status = ''; return true;">Архангельск</A>

Вживую это выглядит так (моя цель - длинный вертикальный список городов).

В браузере при нажатии на подобную ссылку открывается маленькое окошко, HTML которого мне как раз и необходимо заполучить.

В яваскрипте я полный ноль, даже не знаю в какую сторону гуглить. Подозреваю, что при клике на ссылку запускается функция showPricelists, вероятно возвращающая браузеру HTML окошка.

Каким образом получить HTML окошка? Можно ли это сделать без подключения тяжелой артиллерии в виде IE?
...
Рейтинг: 0 / 0
08.06.2010, 00:34
    #36674394
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить HTML-код страницы, генерируемой javascript
Максим М.Можно ли это сделать без подключения тяжелой артиллерии в виде IE?

Не владею в достаточной степени вопросом, чтобы квалифицированно дать ответ, но, по крайней мере, javascript должен кто-то выполнить, и этот кто-то - движок браузера. Так что может без артиллерии и не получится...
...
Рейтинг: 0 / 0
08.06.2010, 07:05
    #36674525
.Михаил.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить HTML-код страницы, генерируемой javascript
Максим М., Вас интересуют эти файлы ?
...
Рейтинг: 0 / 0
08.06.2010, 18:20
    #36676273
Максим М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить HTML-код страницы, генерируемой javascript
.Михаил.Максим М., Вас интересуют эти файлы ?

Они самые.
В принципе я могу составить писок ссылок вручную и качать файлы по ним, однако я не уверен, что при изменении файла не изменится его идентификатор (и, соответсвенно, ссылка). Так что если подскажите более элегантный способ выкачки этих файлов, буду весьма признателен =)
...
Рейтинг: 0 / 0
08.06.2010, 21:33
    #36676590
ak787
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить HTML-код страницы, генерируемой javascript
Максим М.,

юзайте WebBrowser метод Navigate
...
Рейтинг: 0 / 0
08.06.2010, 22:10
    #36676654
.Михаил.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить HTML-код страницы, генерируемой javascript
Максим М., скачиваете полностью эту страницу , вставляете куда-нить теги <script> со своим кодом </script> и юзаете массив citiesCache, в котором есть ссылки на файлы...
...
Рейтинг: 0 / 0
09.06.2010, 00:52
    #36676807
Максим М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить HTML-код страницы, генерируемой javascript
ak787Максим М.,
юзайте WebBrowser метод Navigate
Я бы рад, но у меня с ним проблемы...
И потом IE тормозит безбожно, WinHttpRequest по сравнению с ним просто самолет.

.Михаил.Максим М., скачиваете полностью эту страницу , вставляете куда-нить теги <script> со своим кодом </script> и юзаете массив citiesCache, в котором есть ссылки на файлы...

Михаил, спасибо что открыли глаза! Уже скачивал HTML, но не досмотрел файл до конца, а там оказывается все ссылки на поверхности. Теперь запросто разберу его при помощи InStr.

PS: я только не понял вашу мысль по поводу скачивания страницы целиком: к простому HTML там добавляются 2 файла javascript (ga и rates), с которыми я не знаю что делать... Подозреваю, вы имели в виду более элегантный способ юзанья citiesCache, нежели простой текстовый разбор htmlя?
...
Рейтинг: 0 / 0
09.06.2010, 12:18
    #36677699
.Михаил.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить HTML-код страницы, генерируемой javascript
Максим М., открываешь Excel, жмешь Alt+F11, добавляешь новый модуль, туда кидаешь сей код и запускаешь test.
Примечание: лист, куда отображается информация должен иметь имя Лист1 .
Код: plaintext
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.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
Option Explicit
Sub test()
Dim xmlHTTP As Object, javaText As String, HostName As String, str() As String, pos As Integer
Dim link As String, c As Object, fso As Object, TextStream As Object, objRegExp As Object, objSb As Object, WshShell As Object
Dim PathTemp As String, FileTemp As String
Set xmlHTTP = CreateObject("MSXML2.XMLHTTP")
Set WshShell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set objRegExp = CreateObject("VBScript.RegExp")
HostName = "http://www.gruzovozoff.ru"
PathTemp = "C:\Temp\"
FileTemp = Replace(fso.GetTempName, ".tmp", "")
objRegExp.IgnoreCase = True
objRegExp.Global = True
objRegExp.MultiLine = True
objRegExp.Pattern = "<script[^>]*>([^<>]*(?=city = new Array)+[^<>]*)</script>"
xmlHTTP.Open "GET", HostName & "/rus/rates.php", False
xmlHTTP.Send
Do While xmlHTTP.readyState <>  4 
    DoEvents
Loop
Set objSb = objRegExp.Execute(xmlHTTP.ResponseText).Item( 0 ).Submatches
Set xmlHTTP = Nothing
javaText = Replace(objSb.Item( 0 ), Chr( 13 ), "")
javaText = Replace(javaText, Chr( 10 ), "")
javaText = javaText & " var fso = WScript.CreateObject('Scripting.FileSystemObject');"
javaText = javaText & " var TextStream = fso.CreateTextFile('" & Replace(PathTemp, "\", "\\") & FileTemp & ".txt',true);"
javaText = javaText & " var k; for(k in citiesCache){TextStream.WriteLine(citiesCache[k]['name']+' | '+citiesCache[k]['local']+' | '+citiesCache[k]['in']+' | '+citiesCache[k]['out']);}"
Set TextStream = fso.CreateTextFile(PathTemp & FileTemp & ".js")
TextStream.Write javaText
TextStream.Close
WshShell.Run "wscript.exe " & PathTemp & FileTemp & ".js",  1 , True
Set TextStream = fso.OpenTextFile(PathTemp & FileTemp & ".txt",  1 )
pos =  1 
While Not TextStream.AtEndOfStream
    Erase str
    str = Split(TextStream.ReadLine(), " | ")
    pos = pos +  1 
    Лист1.Cells(pos,  1 ).Value = str( 0 )
    Set c = Лист1.Cells(pos,  2 )
    link = HostName & Replace(str( 1 ), "..", "")
    c.Hyperlinks.Add Anchor:=c, Address:=link, ScreenTip:=link
    c.Value = "local"
    c.Font.Underline = xlUnderlineStyleNone
    Set c = Лист1.Cells(pos,  3 )
    link = HostName & Replace(str( 2 ), "..", "")
    c.Hyperlinks.Add Anchor:=c, Address:=link, ScreenTip:=link
    c.Value = "in"
    c.Font.Underline = xlUnderlineStyleNone
    Set c = Лист1.Cells(pos,  4 )
    link = HostName & Replace(str( 3 ), "..", "")
    c.Hyperlinks.Add Anchor:=c, Address:=link, ScreenTip:=link
    c.Value = "out"
    c.Font.Underline = xlUnderlineStyleNone
Wend
TextStream.Close
fso.DeleteFile PathTemp & FileTemp & ".js"
fso.DeleteFile PathTemp & FileTemp & ".txt"
Set TextStream = Nothing
Set fso = Nothing
End Sub
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получить HTML-код страницы, генерируемой javascript / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]