Как я могу войти на AngularJS веб-сайт с python? - PullRequest
0 голосов
/ 10 апреля 2020

Я попытался прочитать более 10 вопросов здесь о переполнении стека на эту тему, так что извините, если это было сказано ранее. Я почти никогда не задаю вопросы, потому что я всегда чувствую, что мой ответ где-то здесь, и все, что мне нужно сделать, это найти его, но я должен признать, что я в растерянности.

Я ищу автоматизировать загрузку нескольких отчетов с указанного веб-сайта c (http://ecargo.mercosulline.com.br/) после навигации по нему с помощью модуля Python запросов. Тем не менее, я не могу пройти через экран входа в систему .. ха-ха

Если попробовал много разных фрагментов кода, но я вставлю то, что я "наиболее уверен" ниже:

with requests.Session() as s:
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0'}     

payload = {
    #'txt_nome':'username',
    #'txt_senha':'password'
    'usuario':'username',
    'senha':'password'
}

url = 'http://ecargo.mercosulline.com.br/SERVICOS/WSMontarMenu.Service.svc/rest/ChecarUsuario'
#url = 'http://ecargo.mercosulline.com.br/NovoIndex.asp'
#r = s.get(url)
#print(r.content)

r = s.post(url, data=payload, headers=headers)
print(r.text)

После проверки страницы при входе в систему я вижу, что мой браузер отправляет 2 запроса POST:

1-й. http://ecargo.mercosulline.com.br/SERVICOS/WSMontarMenu.Service.svc/rest/ChecarUsuario с «usuario» в качестве имени поля для имени пользователя и «senha» в качестве имени поля для пароля.

2nd. http://ecargo.mercosulline.com.br/NovoIndex.asp там он использует имена форм веб-страницы (txt_nome и txt_senha), как это видно из фрагмента html ниже:

<form name="frmLogin">
                        <br/>

                        <div class="form-group">
                            <input class="form-control" placeholder="Usuário" name="txt_nome" type="text" value="{{viewModel.usuario}}" autofocus ng-model="viewModel.usuario">
                        </div>

                        <br/>

                        <div class="form-group">
                            <input class="form-control" placeholder="Senha" name="txt_senha" type="password" value="{{viewModel.senha}}" ng-model="viewModel.senha">
                        </div>

                        <br/>

                        <button class="btn btn-lg btn-success btn-block" type="submit" ng-click="viewModel.logar()">Entrar</button>

                        <br/>
                    </form>

Если я отправлю данные в первом URL-адресе, они вообще не работают - просто выдает ошибку и говорит: «проверьте журнал сервера для получения более подробной информации». Если я публикую данные во втором URL-адресе и распечатаю их содержимое, это просто возвращает меня к страница входа.

Кажется, эта страница была создана с AngularJS, поэтому я не уверен, что модуль запросов - правильный? Кто-нибудь, пожалуйста, помогите мне?

1 Ответ

0 голосов
/ 10 апреля 2020

Прежде всего, вы должны использовать Browser Инструменты разработчика , а затем перейти к Сетевой монитор .

Затем попробуйте войти на сайт.

Вы заметите следующее:

enter image description here

Это означает, что POST запрос был выполнен с использованием JSON там, где вам нужно использовать json=, но если это form-data, то вы будете использовать data=

Проверьте документ в качестве ссылки.

import requests

data = {
    'senha': 'test@test.com',
    'usuario': 'test123'
}

r = requests.post(
    "http://ecargo.mercosulline.com.br/SERVICOS/WSMontarMenu.Service.svc/rest/ChecarUsuario", json=data).json()


print(r)
...