Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
11.08.2020, 08:07:01

Войти
Хотите поблагодарить участника за дельный совет? Нажмите [Повысить]. Так вы заслуженно поднимите репутацию активному участнику.
31 347 Сообщений в 5 019 Тем от 9 679 Пользователей
Последний пользователь: mrbarsa
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Работа с сайтом на ajax
Страниц: [1]   Вниз
Печать
Автор Тема: Работа с сайтом на ajax  (Прочитано 288 раз)
0 Пользователей и 1 Гость смотрят эту тему.
SirEgor
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 2


Просмотр профиля E-mail
« : 05.07.2020, 19:35:19 »

Добрый день. Недавно начал изучать vba excel, возникла проблема.
Мне необходимо по средствам vba excel подключиться к сайту, отправить через спец. форму некоторые данные, и получившийся ответ записать на страницу в excel.
Но вместо html кода, который я получаю при открытии страницы, например через просмотр кода в гугле, приходит какой-то html-JavaScript код, который я даже не могу нигде на странице найти. Соответственно вытащить из него ничего нельзя.
Использую стандартный код:
Код: (vb)
Dim XMLHTTP As Object
Dim URL As String
Dim Txt As String

URL = "WWW.Какой-то сайт"

Set XMLHTTP = CreateObject("MSXML2.XMLHTTP")
XMLHTTP.Open "GET", URL, False
XMLHTTP.SEND

If XMLHTTP.statustext = "OK" Or XMLHTTP.Status = 200 Then
    MsgBox "Всё ок"
    Txt = XMLHTTP.responseText
    TextBox1.Value = Txt
Else:
    MsgBox "Отсутствует соединение"
End If

Set XMLHTTP = Nothing



Я только постигаю VBA и плох в web разработке, по этому очень прошу подсказать мне, где я могу найти ответ на свой вопрос и по возможности почитать об этом подробнее.
Спасибо.
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +444/-0
Офлайн Офлайн

Сообщений: 5 269



Просмотр профиля WWW
« Ответ #1 : 06.07.2020, 11:56:04 »

Не видя самой страницы сайта советовать особо нечего, т.к. непонятно что там вообще как выводится и можно ли это обработать.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
SirEgor
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 2


Просмотр профиля E-mail
« Ответ #2 : 06.07.2020, 20:23:41 »

Прошу прощения за непрофессиональный подход.
Сегодня на протяжении дня изучал различные ресурсы, особенно помог вот этот(если вдруг кто тоже столкнётся с той же проблемой):
https://www.youtube.com/watch?v=dShR33CdlY8

Сейчас попытаюсь описать всё основательно.
Имеем сайт, например: https://www.dimex.ws/kalkulyator/ekspress/

Заходя по данной ссылке попадаем на страницу, в которой сначала нужно выбрать "Вид услуги", затем ещё раз "Вид услуги" и в конце в итоге попадём на форму калькулятора.
Соль тут в том, что html код подгружается только после выбора опр. опции.
Если конспектировать, то вот что имеем до выбора услуги:

Код: (vb)
<div class="form-horizontal">
<div id="selectBox"><div class="control-group form-group row">
<div class="controls2 col-12"><select name="sel[]" class="form-control">
<option value="58">Выберите вид услуги</option><option value="4">Доставка по городу</option>
<option value="5">Доставка по стране</option><option value="6">Международная доставка</option>
</select>
</div>
</div>
</div>
<div id="f1"><!--  ||--></div>
</div>


И соответственно после в id "f1" у нас приходит:
Код: (vb)
<div class="form-horizontal">
<div id="selectBox"><div class="control-group form-group row"><div class="controls2 col-12">
<select name="sel[]" class="form-control"><option value="58">Выберите вид услуги</option><option value="4">Доставка по городу</option>
<option value="5">Доставка по стране</option><option value="6">Международная доставка</option></select></div></div><div class="control-group form-group row">
<div class="controls2 col-12"><select name="sel[]" class="form-control"><option value="59">Выберите вид услуги</option><option value="7">Доставка по вашему городу</option>
<option value="8">Доставка по другому городу</option></select></div></div></div>
<div id="f1"><!-- 5 ||--><script>
   function addListBox() {
      var myDynamoSelect = $('select[id="packaging"]');


И далее идёт ещё куча кода, который вставлять сюда бессмысленно, суть я думаю и так понятно.

Я понимаю, что судя по всему тут используется эльфийский, который я не знаю, а на изучение которого у меня уйдёт следующий месяц, из-за чего в частности для меня использовать подключение через какой-нибудь MSXML2.XMLHTTP60 бессмысленно.
По этому я стараюсь встать на костыли и запустив Internet Explorer дать ему команду сымитировать пользовательский клик и выбор опции. Пишу следующий код:
Код: (vb)

Sub WebIE_Connect()
    Dim IE As New SHDocVw.InternetExplorer 'Подрубаем IE
    Dim HTMLDoc As MSHTML.HTMLDocument 'Подрубаем работу с HTML
    Dim Checked As MSHTML.IHTMLElementCollection 'Подрубаем элемент из HTML
   
    IE.Visible = True 'Врубаем видимость IE
    IE.Navigate "https://www.dimex.ws/kalkulyator/ekspress/" 'Заходим на сайт
   
    'До тех пор, пока загрузка страницы не произойдёт, бездействуем:
    Do While IE.ReadyState <> READYSTATE_COMPLETE Or IE.Busy
    Loop
   
    Set HTMLDoc = IE.Document 'Пихаем HTML код в переменную
   
    Set Checked = HTMLDoc.getElementsByTagName("select") 'Записываем все элементы с тегом "Select"(она там одна, так что можно было и на прямик обратиться, но да пофиг)
   
    Application.Wait Now + TimeSerial(0, 0, 3) 'Ждём 3 секунды, ибо IE нужно время, что бы прогрузиться
   
    Checked(0).Value = "4" 'Меняем опцию на "Доставка по городу"
    Checked(0).Click 'Кликаем
   
    MsgBox "Сделано!", , "Ляляля!!!" 'Радуемся тому, что нихрена не получилось ((
End Sub


Как видно, если запустить данный код, то опция визуально поменяет своё значение, но страница при этом не подзагрузиться.
Собственно вопрос, есть ли возможность как сымитировать нажатие, а ещё лучше сделать это без IE. Очень прошу помочь, по возможности, накидайте пожалуйста ссылок на статьи по данной теме, так как я в гугле ничего найти не сумел.
Заранее - спасибо!
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +444/-0
Офлайн Офлайн

Сообщений: 5 269



Просмотр профиля WWW
« Ответ #3 : 07.07.2020, 11:29:08 »

Тут все непросто. Скачайте программу Fiddler, поиграйтесь параметрами и изучите те GET и POST, которые передаются сайту при выборе разных опций.
Следует еще так же учесть, что там и Cookie могут использоваться, что затрудняет автоматическую работу с сайтом.
Сейчас, если честно, нет времени заниматься этим.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru