1

我目前正在使用 Python 3.7 的 Requests 库尝试并按照 Julian 提供的说明登录到以下页面

这是我所做的:

loginSession = requests.Session()    
url = 'https://portal.projectworx.net/STS/Home/GetTenant'
payload = {'UserName': login, 'Password': password}
user_agent = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'}
login_request = loginSession.post(url, payload, headers=user_agent)

if(login_request.status_code == 200):
    print ("Successful log-in !")
    file = open("login_response.html", "w")
    file.write(login_request.text)
    file.close()

    # Connect to dashboard
    url = 'https://portal.projectworx.net/ProjectWorx/Dashboard/Home'
    dashboard_request = loginSession.get(url)
    file = open("dashboard_request.html", "w")
    file.write(dashboard_request.text) 
    file.close()

虽然理论上我已经建立了连接(返回码 200),但“login_request.html”和“dashboard_request.html”最终都包含初始登录页面。

注意:我在 Julian 的示例和我的示例之间发现了一个偏差,即在检查登录页面的 HTML 代码时,我找不到“用户”和“密码”的输入名称。相反,我发现了以下内容:

<input id="TenantId" name="TenantId" type="hidden" value="">

不确定如何使用这种类型的表单将正确的输入参数传递给“发布”。

编辑1:

在使用 Pete 的方法在 Network 选项卡中嗅探请求并使用正确的输入数据(用户名和密码)后,我在 login_response.html(从“login_request.text”创建)中获得了以下内容

login_request.html 的截图

这似乎比以前好多了,因为它似乎反映了浏览器正在接收的内容。但是尝试在仪表板上获取仍然会返回登录页面。登录请求后“loginSession.cookies”仍然为空,不知道这是否正常。

编辑2:

在浏览器方面,通过在“网络”选项卡中登录后查看流量,我观察到以下内容:

网络流量

与登录相关的前几行在请求标头中包含以下 cookie:

_ga=****; _gac_****

然后(例如,对于突出显示的行),它嵌入了以下 cookie:FedAuth=******; _ga=****; 广汽****;.ASPXAUTH=********

但是因为我似乎无法捕捉到 cookie,所以我不知道如何处理这些信息..

进一步的帮助将再次不胜感激!提前致谢。:)

4

1 回答 1

1

您需要使用 Web 开发人员工具对该特定站点的登录过程进行逆向工程。您可能不需要费心在 HTML 中进行路由,而是复制浏览器发出的 POST 请求。在 Chrome 和 Firefox 中,您可以按 F12 并选择网络选项卡,然后正常登录并观察发送到服务器的内容。

不幸的是,没有帐户,我无法确切告诉您需要发送什么,但一目了然。

您需要发布到的 URL 实际上是https://portal.projectworx.net/STS/Home/GetTenant而不是https://portal.projectworx.net/STS/Home/Login

您提交的表单数据(有效负载)也应该是 {'UserName': login, 'Password': password} 而不是您正在使用的。

附图显示了我在 Chrome 开发人员工具的网络选项卡中看到的内容。此 POST 是在按下登录按钮后触发的,用户名 test 和 test 密码输入到相应的输入字段中。

在此处输入图像描述

于 2020-03-15T16:52:44.077 回答