Найти тему
Виктор Шугаров

VBScript: Работа с сайтом VK.com [Часть 01. (Дополнение) Получение кода страницы и про сохранение оного в файл].

VBScript: Работа с сайтом VK.com [Часть 01. (Дополнение) Получение кода страницы и сохранение оного в файл].

Немного подумав, всё-таки добавлю немного по работе скрипта из предыдущей публикации, что же на самом деле происходит. Почему может некорректно работать и как можно было бы исправить.

Есть такая часть кода,цитирую четыре эти строки, которые надо попытаться понять и объяснить:

  • r.open "GET", url&"?", False
  • r.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
  • r.send
  • wscript.sleep 1000*2

Первая команда на самом деле не просто открывает запрос, всё намного интереснее и веселее. Дело в том что мы не попадаем на сайт по указанной ссылке при запросе на vk.com , а нас автоматически перекинет по другому адресу (реферальная ссылка, надеюсь не ввожу в обман и заблуждение термином/названием). Далее может опять оказаться страница с подобной ссылкой итак далее. Ну как минимум одна из таких ссылок - это проверка авторизации на сйте. Может быть и нет других перебросов, но и одного достаточно, правда ведь?

То есть открываем ссылку, загружаем страницу, делаем что-то, нас перебрасывает на другой сайт, опять что после загрузки что-то выполняется и опять перебрасывает по другой ссылке и возможно ещё несколько раз такое происходит.

Смотрим код, вот команда есть " r.send", так мы инициирует отправку запроса на загрузку страницы. Вы можете спросить, а где реферальные переходы в нашем коде учитываются или выполняются? А вот тут как раз пауза в 2 секунды их пропускает. На самом деле не знаю, не нашёл информацию в сети Интернет о количестве реферальных переходов.

Для меня сначала было удивительно, что без паузы не получал код страницы, пока не вспомнил про переадресацию. Вот эта проверка должна была по идее дать нам тело страницы, но там же не страница, а переадресация:

  • If r.Status = 200 Then

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

В нашем случае лучше и проще оказалось просто сделать паузу и получить готовый код/тело страницы уже после всех этих реферальных переходов.

Удачи!

P.S. Возможно немного поправлю текст, если замечу уж слишком явные ошибки, а может не буду это делать. :-)

P.P.S. Когда делал скрипт, то допустил грубую ошибку в коде и убрал данную статью с публикации, давайте-ка посмотрим где я ошибся тогда, теперь-то код исправлен. Вот как была строка, которая некорректно работала:

  • r.open "GET", url&"?", True

Все дело в типе запроса: синхронный или асинхронный. Рекомендую почитать про это самостоятельно, будет надёжнее и полезнее imho. :-)

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

Перед r.send я делал паузу около 2 секунды командой "WScript.Sleep 2000", что давало возможность всё-таки получить запрошенную страницу, а иначе было просто ничего в ответе и это не только ставило в тупик, но и сильно раздражало. Для чего-то это нужно, но не нам в данном случае. Поэтому, после установки False , всё распрекрасно стало работать и пришёл Дзен. :-)

Надо еще напомнить, что ответ мы получаем не в кодировке ANSY, а в UTF-8, советую про это тоже почитать. Но могу сказать от себя про utf8 сразу - это иногда/часто мешает сохранить в текстовый файл данные, поэтому в следующей статье мы будем сохранять по-"правильному" методу в файл.

Спасибо, удачи!