Страницы: 1
RSS
Парсинг сайтов с авторизацией, а именно сайта на Битрикс
 
Здравствуйте.
использовал раньше для получения html кода функцию GetResponse, найденную в просторах интернета.

Скрытый текст


Работает все красиво, но не на сайтах с авторизацией.
Сделал авторизацию через объект InternetExplorer - появилась другая проблема:
IE.Document.Body.InnerHtml возвращает не весь html код страницы, а только его часть, описывающую, как я понял, вертикальное меню справа.
Это где то десятая часть от всего кода и к тому же - совершенно мне не нужная)

Как вернуть весь код?
Или как можно провести авторизацию без использования InternetExplorer?

Спасибо.
 
Для авторизации необходимо передать параметры в форме, но только через POST. Например, для авторизации на planetaexcel.ru форма имеет следующие параметры:
- backurl:/index.php
- AUTH_FORM:Y
- TYPE:AUTH
- USER_LOGIN:SuperCat
- USER_PASSWORD:
- USER_REMEMBER:Y
Login:Войти

Соответственно, нужно заполнить все эти параметры и передать в Send качестве аргумента Body:
Код
Sub WithAuth()
    
    Dim req As New WinHttp.WinHttpRequest
    Dim auth

    auth = "backurl=/index.php&AUTH_FORM=Y&TYPE=AUTH&USER_LOGIN=SuperCat&USER_PASSWORD=ПАРОЛЬ&USER_REMEMBER=Y&Login=Войти"

    req.Open "POST", "http://www.planetaexcel.ru/index.php?login=yes", False
    req.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    req.Send auth
    
End Sub
Изменено: SuperCat - 07.07.2016 09:37:32
There is no knowledge that is not power
 
Спасибо за ответ.
Или я что то делаю не так, или чего...
Все равно возвращает код страницы авторизации.
Вот мой код (закомментированы другие варианты, которые нашел здесь)

Код
 Sub WithAuth()

On Error Resume Next: Err.Clear
    Dim req As New WinHttp.WinHttpRequest
    Dim auth$, UserName$, Password$
    UserName = ""
    Password = ""
    AuthURL = "...index.php?login=yes"

    auth = "backurl=/services/index.php&AUTH_FORM=Y&TYPE=AUTH&USER_LOGIN=" & UserName & "USER_PASSWORD=" & Password & "&USER_REMEMBER=Y&Login=Войти"
    With req
        .Open "POST", AuthURL, False
        .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        .Send auth

        '        .Open "POST", AuthURL, False
        '        .SetCredentials UserName, Password, 0

        '        .SetRequestHeader "Cookie", "UserID=" & UserName
        '        .SetRequestHeader "Cookie", "Password=" & Password

        '        .Send

'здесь уже пытаюсь получить код нужной страницы  URL_main - глобальная переменная
        .Open "GET", URL_main, True
        .Send

        rez = .ResponseText
        Debug.Print rez
    End With
End Sub
 
Третий аргумент, где GET, сделай False (Async). У меня вот этот код нормально работает:
Код
Sub WithAuth()
    
    Dim req As New WinHttp.WinHttpRequest
    Dim auth$
 
    auth = "backurl=/index.php&AUTH_FORM=Y&TYPE=AUTH&USER_LOGIN=SuperCat&USER_PASSWORD=PASSWORD&USER_REMEMBER=Y&Login=Войти"
 
    req.Open "POST", "http://www.planetaexcel.ru/index.php?login=yes", False
    req.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    req.Send auth
    
    req.Open "GET", "http://www.planetaexcel.ru/forum/", False
    req.Send

End Sub
There is no knowledge that is not power
 
Цитата
Dima S написал: IE.Document.Body.InnerHtml возвращает не весь html код страницы
Это значит, что страница дописывается скриптами.Посмотрите через любой сниффер трафика обмен с сервером.
Будет еще несколько запросов к серверу.В сторону этих запросов копать надо.
 
А можно для конкретной таблицы пример? Допустим данная тема.., а то без видимого результата непонятно.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Цитата
Doober написал:  любой сниффер трафика обмен с сервером
Fiddler, полагаю...
p.s. может быть кто-нибудь знает,  если в html (когда не всё есть по коду) есть обращение к asp.net странице - такого рода вещи вытягиваются или нет?.. - через что?.. может ведь и такой вариант быть... когда не взять данных с html///
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Я использую Developer Tools (есть в FireFox, Opera, Chrome, Edge, IE).
There is no knowledge that is not power
 
to JeyCi - вставлю свои пять копеек, я опять про R. На данный момент - это лучшая среда для парсинга сайта (через него парсю авито).
google пакеты rvest (легкий парсинг по css/xpath), rSelenium (тут и тут есть туториал). В rSelenium lля динамических сайтов используется браузер phantomjs, сайт прогружается в браузере, а потом его структура конвертируется в обычный html.

p.s: в этом году microsoft выкупила платформу разработки R,  теперь R это официальный мелкософтный язык программирования. устанавливается без запроса прав администратора тыц. R интегрирован в oracle и sql server.
 
ух, сколько информации - всем спасибо
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Спасибо за ответы/советы/внимание).
К счастью все оказалось проще чем дописываемая скриптами страница)
Что касается
Цитата
IE.Document.Body.InnerHtml возвращает не весь html код страницы
то я просто затупил - выводил ее в Immediate - а там по ходу лимит на количество символов.
То есть отображается корректно.
Но способ не удобен, так как IE иногда запоминает параметры авторизации, иногда - нет. Приходится дополнительные проверки устраивать...
мне помогло решение отсюда.
просто так, без манипуляций с логином и паролем, не пускает)
 
А что за сайт такой? :)
There is no knowledge that is not power
Страницы: 1
Наверх