Страницы: 1
RSS
Дождаться полной загрузки сайта, MSXML2.ServerXMLHTTP.6.0
 

При получении текста с сайта и рабивая данные по тегу, очень часто получаю разные значения количесва объектов в массиве. иногда допустим 160 а иногда 660. Как дождаться когда полностью закгрузиться сайт?. .readyState = 4, статус тоже проверал. Когда просто заходишь на сайт, ручками в браузере, иногда видно что информация подгружается дополнительно. как реализовать код чтоб я получил полный txt сайта. Код использую вида.

Код
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
Sub XMLHTTP()
ctroka:
 On Error GoTo errorHandler
        With CreateObject("MSXML2.ServerXMLHTTP.6.0")
        .Open "GET", URL, "False"
        .setTimeouts 10000, 10000, 10000, 10000
        .send ("")
'        .setProxy 2, myProxy
'        .setProxyCredentials mylogin, mypassword
cTime = Now + TimeValue("00:00:20")
 If Now < cTime Then
        Do
        DoEvents
        Loop Until .readyState = 4
Else
        popitka = popitka + 1
        If popitka >= 3 Then
        Exit Sub
        Else
        GoTo ctroka:
        End If
End If
        txt = .responseText
        End With
errorHandler:
 
arr50 = Split(GetTags(txt, "td", "class", "*resultDeadline *", "innerHTML"), ARSEP)
kolishestvo1 = UBound(arr50, 1) - LBound(arr50, 1) + 1
 
Если использовать браузер IE - то недостаточно проверять только .readyState = 4, надо ещё .Busy проверять
Например, ждем готовности браузера IE, но не более 2 секунд:
Код
1
2
3
4
5
        TimeStamp = Timer
        Do While (.Busy = True) Or (.readyState <> 4)
            DoEvents
            If Abs(Timer - TimeStamp) >= 2 Then Exit Do
        Loop


Если же работаем БЕЗ браузера (как у вас, компонент MSXML2.ServerXMLHTTP.6.0), то ничего вы не дождётесь
Ибо тут скрипты не отрабатывают, и, соответственно, ничего не догружают, — сколько сайт выдал данных, столько и выведется.

Вы решили совместить 2 принципиально разных кода (взяли рабочий код для MSXML2.ServerXMLHTTP.6.0, и засунули туда кусок кода от работы с браузером), — так не прокатит.

Возможно, проблема в прокси (который обрезает часть данных / выдаёт их не совсем корректно)
Изменено: Игорь - 04.02.2024 10:03:40
 
Игорь, Спасибо. Свойства ".Busy" для "MSXML2.ServerXMLHTTP.6.0" нет . Мне именно под прокси нужно заходить на сайт, и вытаскивать информацию. Самый простой метод это Ваш же пример, за это вам огромное спасибо. На сайте "2ip" проверяю, все хорошо. Захожу на нужный сайт значит под прокси, но не всегда получаю всю информацию.....  а для IE есть способ зати сразу под прокси? Интернет весь перерыл, нашел только через "cmd". Вроде этого.
Код
1
cmdkey /generic:101.101.101.101 /user:12345 /pass:123456
Это я добавляю в диспетчер учетных данных свои данные чтоб IE не запрашивал пароль.
Потом запускаю скрипт ".vbs"
Код
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Option Explicit
Dim valUserIn
Dim objShell, RegLocate, RegLocate1
Dim args
 
set args = Wscript.Arguments
valUserIn = args(0)
Set objShell = WScript.CreateObject("WScript.Shell")
On Error Resume Next
RegLocate = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer"
objShell.RegWrite RegLocate,valUserIn,"REG_SZ"
RegLocate = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable"
objShell.RegWrite RegLocate,"1","REG_DWORD"
WScript.Quit
Все работает через VBA. Запущено все циклом, но загвоздка в том что примерно после пятой попытки, прокси не меняется. Пробовал возвращать в исходное состояние, без прокси, очищать в диспетчере все данные, и всеравно ничего не помогает..... После перезагрузки ПК все опять работает но опять только на 5-10 прокси. Всетаки как зайти через IE под прокси?
Изменено: Максим Бугриев - 05.02.2024 13:40:47
 
Если нужен IE - зачем используете компонент "MSXML2.ServerXMLHTTP.6.0" ?

XMLHTTP60 использует WinInet HTTP стек (вместе с Internet Explorer)
ServerXMLHTTP60 использует WinHttp стек (как и компонент WinHttpRequest)

Вам нужно использовать либо CreateObject("MSXML2.XMLHTTP"), либо запускать IE
А вы сейчас прописываете прокси для IE, а потом используете компонент, не связанный с IE
Ну или не знаю какой код вы там используете (вы даете куски кода, да еще и с IE не связанные, — гадать что там у вас нет желания)

тем более, если несколько раз всё работает, не понятен сам вопрос, как "зайти через IE под прокси"
(нагуглите код работы с IE через VBA, например по фразе vba IE set proxy)
чтобы прокси применялся, можно попробовать первый ответ из этой темы:
https://stackoverflow.com/questions/55362424/toggle-internet-explorer-proxy-from-excel-vba
Страницы: 1
Читают тему
Наверх
Loading...