如何使用python登录AngularJS网站?

2024-10-02 00:32:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经试着在这里阅读了10多个关于堆栈溢出的问题,所以如果之前有人问过这个问题,请原谅我。我很少问问题,因为我总觉得我的答案就在这里,我所要做的就是寻找答案,但我必须承认我在这里不知所措

在使用Python请求模块浏览特定网站(http://ecargo.mercosulline.com.br/)之后,我希望能够从该网站自动下载一些报告。但是,我无法通过登录屏幕。。哈哈

如果我尝试了许多不同的代码片段,我会将我最“自信”的内容粘贴到下面:

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”请求:

第一名http://ecargo.mercosulline.com.br/SERVICOS/WSMontarMenu.Service.svc/rest/ChecarUsuario 用户名的字段名为“usuario”,密码的字段名为“senha”

第二名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创建的,所以我不确定请求模块是否正确?有人能帮我吗


Tags: brdivformtxtcomhttpurlclass
1条回答
网友
1楼 · 发布于 2024-10-02 00:32:11

首先,您必须使用BrowserDeveloper Tools,然后导航到Network Monitor

然后尝试登录到该站点

你会注意到以下几点:

enter image description here

这意味着一个POST请求已经使用JSON完成,您需要使用json=但是如果它是form-data,那么您将使用data=

选中document作为引用

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)

相关问题 更多 >

    热门问题