Страницы: 1
RSS
При получении тела HTML страницы текст не соответствует коду страницы в браузере
 
Добрый день.
Пытался просто получить расстояние между ЖД станциями через сайт РЖД.
Например: http://cargo.rzd.ru/distance/public/ru?STRUCTURE_ID=5105&layer_id=5137&fromStationCode=060232&toStationCode=620508

Код
Sub test()
    MsgBox RGD("060232", "620508")
End Sub

Function RGD(st1 As String, st2 As String)
    Dim X() 
    Const sRGD = "http://cargo.rzd.ru/distance/public/ru?STRUCTURE_ID=5105&layer_id=5137&fromStationCode=СТАНЦИЯ1&toStationCode=СТАНЦИЯ2"

    On Error Resume Next
    sURL = Replace(sRGD, "СТАНЦИЯ1", st1)
    sURL = Replace(sURL, "СТАНЦИЯ2", st2)
    Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
    With oXMLHTTP
        .Open "GET", sURL, False
        .send
        sHTMLBody = .responsetext
    End With

    Set oXMLHTTP = Nothing
    S = sHTMLBody
    
    S = Replace(S, Chr(9), "")
    S = Replace(S, Chr(10), "")
    S = Replace(S, Chr(13), "")
    S = Replace(S, Chr(34), "")
    S = Replace(S, Chr(32), "")
    S = Replace(S, Chr(160), " ")
    S = Replace(S, "<tr><td>КРАТЧАЙШЕЕРАССТОЯНИЕ:</td><td>", "|Q|")
    S = Replace(S, "км.</td>", "|Q|")
    m = Split(S, "|Q|")
    
    
    If UBound(m) = 2 Then
        RGD = m(1)
    Else
        RGD = "НЕ НАЙДЕНО!!!"
    End If
    
End Function


Выдает {{deliveryDistance}} а не заветные 971.
Подскажите, в чем проблема?
Заранее признателен.
Изменено: Ivan.kh - 18.02.2019 12:18:39
 
Ivan.kh, мне кажется скрипт не успевает отработать. Если сделать WEB Query, то видно, как страница загрузилась, а постом появляется дистанция и срок. а до этого там переменные.
По вопросам из тем форума, личку не читаю.
 
БМВ, Это я понимаю, а как это побороть - нет.
 
не могу проверить трафик... но я бы посмотрела через Fiddler весь трафик... может линк отдельный запрашивается на вашу инфу... - т.е. не по линку страницы брать,  а по доп. линку, который автоматом запрашивается с страницы без вашего ведома... в Fiddler'e видно всё что запрашивается/грузится при загрузке вашей страницы... и если, действительно, инфа идёт отдельным линком (который автоматом запрашивается/выводится со страницы вами запрашиваемой) -- то делать запрос на него напрямую И проставить заголовки RequestHeaders... вобщем советую раз познакомиться с Fiddler, чтобы всегда знать о трафике бОльше чем просто ваш линк в браузере... sorry что не могу проверить на практике сама, но из опыта я бы направила вас в Fiddler... поковырять весь трафик от данной страницы  
Изменено: JeyCi - 18.02.2019 14:03:48
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
DoEvents?
 
Цитата
sHTMLBody = .responsetext
или посмотреть
sHTMLBody = .responseBody
--- что вобщем-то, маловероятно, что проблема в этом...
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
Anchoret написал:
DoEvents?
на выбор
Код
        d = DateAdd("s", 3, Now)
        Do While Now < d
            DoEvents
        Loop
   или
Код
     If XMLHTTP.statustext = "OK" Or XMLHTTP.Status = 200 Then
         xx = .responseText
        Debug.Print xx
     End If
p.s.
#4 - более приоритетен ! - возможно, придётся задавать и RequestHeader такой:
Код
       .setRequestHeader "X-Requested-With", "XMLHttpRequest"         'both - if needed
       .setRequestHeader "Referer", "вызывающий линк - т.е. исходный адрес страницы вызывающей"    'both - if needed
(если предположение #4 верно - в любом случае - заголовки все увидите в Fiddler - включая этот ЕСЛИ он нужен)
Изменено: JeyCi - 18.02.2019 14:15:31
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Иван , не все так просто.
Цитата
1.Получили текст по ссылке
http://cargo.rzd.ru/distance/public/ru?STRUCTURE_ID=5105&layer_id=5137&fromStationCode=524141&toStationCode=641608
нашли в скрипте такую ссылку
http://cargo.rzd.ru/distance/public/ru?STRUCTURE_ID=5105&layer_id=5882&refererLayerId=5137
 <script>
     window.DISTANCE_CALC_LINKS = {
       Req: "/distance/public/ru?STRUCTURE_ID=5105&layer_id=5882&refererLayerId=5137",  
2.Отправили запрос.В ответ json,j разобрали его и
получили из ответа work_id=15504908054963
3.Отправили запрос
http://cargo.rzd.ru/distance/public/ru?STRUCTURE_ID=5105&layer_id=5884&refererLayerId=5137&work_id=15504908054963&" & Chr(34) & Chr(34)
В ответ json, разобрали его и получили данные
Изменено: doober - 18.02.2019 15:26:50
 
Anchoret, Спасибо За участие, не понял как это в данной ситуации применить.
JeyCi,спасибо за Fiddler, в нем увидел то, о чем выше писал doober (Это если правильно понял).
Думал, что все не так сложно...
Страницы: 1
Наверх