Получить HTML-код страницы, генерируемой javascript - VB

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток!
Есть задача получения HTML кода сайта, которую я решаю следующим нехитрым способом:

Однако недавно задача усложнилась: в HTML коде сайта попадаются следующие ссылки:
CLASS=PRICELISTS_MENU
onClick="showPricelists('80a73881b29aa19ad5524ab7ef3f9998', this); return false;"
onMouseOver="self.status = 'Архангельск'; return true;"
onMouseOut="hidePricelists(); self.status = ''; return true;">Архангельск

Вживую это выглядит так (моя цель - длинный вертикальный список городов).
В браузере при нажатии на подобную ссылку открывается маленькое окошко, HTML которого мне как раз и необходимо заполучить.
В яваскрипте я полный ноль, даже не знаю в какую сторону гуглить. Подозреваю, что при клике на ссылку запускается функция showPricelists, вероятно возвращающая браузеру HTML окошка.
Каким образом получить HTML окошка? Можно ли это сделать без подключения тяжелой артиллерии в виде IE?

Решение задачи: «Получить HTML-код страницы, генерируемой javascript»

textual
Листинг программы
<font color="blue">Option</font> <font color="blue">Explicit</font>
<font color="blue">Sub</font> test()
<font color="blue">Dim</font> xmlHTTP <font color="blue">As</font> <font color="blue">Object</font>, javaText <font color="blue">As</font> <font color="blue">String</font>, HostName <font color="blue">As</font> <font color="blue">String</font>, str() <font color="blue">As</font> <font color="blue">String</font>, pos <font color="blue">As</font> <font color="blue">Integer</font>
<font color="blue">Dim</font> link <font color="blue">As</font> <font color="blue">String</font>, c <font color="blue">As</font> <font color="blue">Object</font>, fso <font color="blue">As</font> <font color="blue">Object</font>, TextStream <font color="blue">As</font> <font color="blue">Object</font>, objRegExp <font color="blue">As</font> <font color="blue">Object</font>, objSb <font color="blue">As</font> <font color="blue">Object</font>, WshShell <font color="blue">As</font> <font color="blue">Object</font>
<font color="blue">Dim</font> PathTemp <font color="blue">As</font> <font color="blue">String</font>, FileTemp <font color="blue">As</font> <font color="blue">String</font>
<font color="blue">Set</font> xmlHTTP = CreateObject(<font color="teal">"MSXML2.XMLHTTP"</font>)
<font color="blue">Set</font> WshShell = CreateObject(<font color="teal">"WScript.Shell"</font>)
<font color="blue">Set</font> fso = CreateObject(<font color="teal">"Scripting.FileSystemObject"</font>)
<font color="blue">Set</font> objRegExp = CreateObject(<font color="teal">"VBScript.RegExp"</font>)
HostName = <font color="teal">"http://www.gruzovozoff.ru"</font>
PathTemp = <font color="teal">"C:\Temp\"</font>
FileTemp = Replace(fso.GetTempName, <font color="teal">".tmp"</font>, <font color="teal">""</font>)
objRegExp.IgnoreCase = True
objRegExp.Global = True
objRegExp.MultiLine = True
objRegExp.Pattern = <font color="teal">"<script[^>]*>([^<>]*(?=city = new Array)+[^<>]*)"</script[^></font>
xmlHTTP.<font color="blue">Open</font> <font color="teal">"GET"</font>, HostName & <font color="teal">"/rus/rates.php"</font>, False
xmlHTTP.Send
<font color="blue">Do</font> <font color="blue">While</font> xmlHTTP.readyState <> <font color="darkblue"><b>4</b></font>
    DoEvents
<font color="blue">Loop</font>
<font color="blue">Set</font> objSb = objRegExp.Execute(xmlHTTP.ResponseText).Item(<font color="darkblue"><b>0</b></font>).Submatches
<font color="blue">Set</font> xmlHTTP = <font color="blue">Nothing</font>
javaText = Replace(objSb.Item(<font color="darkblue"><b>0</b></font>), Chr(<font color="darkblue"><b>13</b></font>), <font color="teal">""</font>)
javaText = Replace(javaText, Chr(<font color="darkblue"><b>10</b></font>), <font color="teal">""</font>)
javaText = javaText & <font color="teal">" var fso = WScript.CreateObject('Scripting.FileSystemObject');"</font>
javaText = javaText & <font color="teal">" var TextStream = fso.CreateTextFile('"</font> & Replace(PathTemp, <font color="teal">"\"</font>, <font color="teal">"\\"</font>) & FileTemp & <font color="teal">".txt',true);"</font>
javaText = javaText & <font color="teal">" var k; for(k in citiesCache){TextStream.WriteLine(citiesCache[k]['name']+' | '+citiesCache[k]['local']+' | '+citiesCache[k]['in']+' | '+citiesCache[k]['out']);}"</font>
<font color="blue">Set</font> TextStream = fso.CreateTextFile(PathTemp & FileTemp & <font color="teal">".js"</font>)
TextStream.<font color="blue">Write</font> javaText
TextStream.<font color="blue">Close</font>
WshShell.Run <font color="teal">"wscript.exe "</font> & PathTemp & FileTemp & <font color="teal">".js"</font>, <font color="darkblue"><b>1</b></font>, True
<font color="blue">Set</font> TextStream = fso.OpenTextFile(PathTemp & FileTemp & <font color="teal">".txt"</font>, <font color="darkblue"><b>1</b></font>)
pos = <font color="darkblue"><b>1</b></font>
<font color="blue">While</font> <font color="blue">Not</font> TextStream.AtEndOfStream
    <font color="blue">Erase</font> str
    str = Split(TextStream.ReadLine(), <font color="teal">" | "</font>)
    pos = pos + <font color="darkblue"><b>1</b></font>
    Лист1.Cells(pos, <font color="darkblue"><b>1</b></font>).Value = str(<font color="darkblue"><b>0</b></font>)
    <font color="blue">Set</font> c = Лист1.Cells(pos, <font color="darkblue"><b>2</b></font>)
    link = HostName & Replace(str(<font color="darkblue"><b>1</b></font>), <font color="teal">".."</font>, <font color="teal">""</font>)
    c.Hyperlinks.Add Anchor:=c, Address:=link, ScreenTip:=link
    c.Value = <font color="teal">"local"</font>
    c.Font.Underline = xlUnderlineStyleNone
    <font color="blue">Set</font> c = Лист1.Cells(pos, <font color="darkblue"><b>3</b></font>)
    link = HostName & Replace(str(<font color="darkblue"><b>2</b></font>), <font color="teal">".."</font>, <font color="teal">""</font>)
    c.Hyperlinks.Add Anchor:=c, Address:=link, ScreenTip:=link
    c.Value = <font color="teal">"in"</font>
    c.Font.Underline = xlUnderlineStyleNone
    <font color="blue">Set</font> c = Лист1.Cells(pos, <font color="darkblue"><b>4</b></font>)
    link = HostName & Replace(str(<font color="darkblue"><b>3</b></font>), <font color="teal">".."</font>, <font color="teal">""</font>)
    c.Hyperlinks.Add Anchor:=c, Address:=link, ScreenTip:=link
    c.Value = <font color="teal">"out"</font>
    c.Font.Underline = xlUnderlineStyleNone
<font color="blue">Wend</font>
TextStream.<font color="blue">Close</font>
fso.DeleteFile PathTemp & FileTemp & <font color="teal">".js"</font>
fso.DeleteFile PathTemp & FileTemp & <font color="teal">".txt"</font>
<font color="blue">Set</font> TextStream = <font color="blue">Nothing</font>
<font color="blue">Set</font> fso = <font color="blue">Nothing</font>
<font color="blue">End</font> <font color="blue">Sub</font>

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5