无法成功会话到需要Python中的登录请求库的网站

无法成功会话到需要Python中的登录请求库的网站,python,rest,session,python-requests,Python,Rest,Session,Python Requests,我目前正试图从一个我工作时使用的电子医疗系统中提取一些HTML文件。我目前有一个python机器人,它可以登录到系统中,并能够为我下载和发送传真,但我希望我的机器人在登录和发送传真之前能够快速抓取一些页面。这些页面是基本的HTML,有非常可预测的URL,我已经测试过,我可以从浏览器手动调用这些页面,所以一旦我建立了会话,这应该很容易 网址为: 登录URL: 第二个URL: 我将username和password字段设置为输入的name/ID,但这不起作用。所以我在我们的旧电子病历上尝试了这个脚本

我目前正试图从一个我工作时使用的电子医疗系统中提取一些HTML文件。我目前有一个python机器人,它可以登录到系统中,并能够为我下载和发送传真,但我希望我的机器人在登录和发送传真之前能够快速抓取一些页面。这些页面是基本的HTML,有非常可预测的URL,我已经测试过,我可以从浏览器手动调用这些页面,所以一旦我建立了会话,这应该很容易

网址为:

登录URL:

第二个URL:

我将username和password字段设置为输入的name/ID,但这不起作用。所以我在我们的旧电子病历上尝试了这个脚本,我们用它来确认它没有损坏,它确实工作得很好。所以我开始在我的请求中玩弄标题,但仍然没有成功。我不确定我的登录是否失败,或者他们是否检测到我是一个机器人,并一次又一次地为我提供登录页面,但我花了大约10个小时试图研究解决方案,目前我的项目遇到了瓶颈


如果有人看到我的代码中有任何错误或有可行的解决方案,请随时提出建议。感谢您的帮助,希望我很快就能了解更多关于RESTful web服务的信息。

您认为HTML可能位于
post.text

编辑: 请使用以下标题尝试请求:

。。。
user_agent_str=“Mozilla/5.0(Windows NT 10.0;Win64;x64)”\
+“AppleWebKit/537.36(KHTML,像壁虎一样)”\
+“Chrome/78.0.3904.97”\
+“Safari/537.36”
content\u type\u str=“应用程序/json”
标题={
“用户代理”:用户代理,
“内容类型”:内容类型
}
...
另一编辑:


我不确定
请求是否已经处理了这个问题,但负载不是有效的JSON。您也可以尝试使用双引号而不是单引号。

我建议尝试这两种方法

  • kinnser.net/loginlogic.cfm
    从网络调用来看,这似乎是post url
  • 将“用户名”更改为“用户名”,将“密码”更改为“密码”,然后重试

由于我没有访问用户名和密码,我无法验证这一点,但这两件事可能是导致问题的原因。

这是post URL感谢您的快速响应!好的,我对脚本进行了更新以反映这些问题。我也将更新帖子,但很不幸,我仍然收到了登录页面的服务。如果我给你一个沙箱登录到模拟系统,你能帮我确定其余的问题吗?你认为它现在是标题还是什么?post.text和r.text将返回与当前登录页面相同的HTML。我刚刚删除了.text以使运行它和读取输出更容易。您在该代码段中设置的用户代理就是答案!现在它正在运行,我正在抓取会话中我想要的任何页面,非常感谢!!!现在我真的可以潜水了安全的东西。。。我的意思是200好:)
     import requests
     import json
     import logging
     import json
     from requests.auth import HTTPBasicAuth
     from lxml import html

     #This URL will be the URL that your login form points to with the "action" tag.
     POST_LOGIN_URL = 'https://kinnser.net/loginlogic.cfm'

     #This URL is the page you actually want to pull down with requests.
     REQUEST_URL = 'https://kinnser.net/AM/Message/inbox.cfm'

     #username-input-name is the "name" tag associated with the username input field of the login form.
     #password-input-name is the "name" tag associated with the password input field of the login form.
     payload = {
         'username': 'XXXXXXXX',
         'password': 'XXXXXXXXX'}

     headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'}
     with requests.Session() as session:
         post = session.post(POST_LOGIN_URL, data=payload, headers=headers)
         print(post)
         r = session.get(REQUEST_URL)
         print(r.text)   #or whatever else you want to do with the request data!