我目前正在试图从电子医疗系统,我使用的工作刮去一些HTML文件。我现在有一个python机器人是登录到系统,并能下载和发送传真给我,但有一些网页我希望我的机器人能够迅速抓住它,即使是在记录和发送传真前。这些页面是具有非常可预见的网址,基本HTML和我已经测试我可以手动调用从我的浏览器页面,所以一旦我得到我的session成立。它应该是很容易的工作。

该网站是:https://kinnser.net/

登录URL:https://kinnser.net/login.cfm

第二URL:https://kinnser.net/AM/Message/inbox.cfm

     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!

我打得四处用户名,与password场将其设定等于输入的name/ID但这是行不通的。所以,我想对我们的老EMR这个剧本,我们只是用来确认它也不会断裂,而且它确实很好地工作。于是,我开始玩弄我的请求头和它仍然没有骰子。我不知道如果我的登陆只是失败或如果他们检测到我是一个机器人,并再次为我的登录页面,一遍又一遍,但我已经花了约10小时试图研究一个解决方案,我已经打了一堵墙与目前我的项目。

如果有人看到是我的代码中的任何错误或有可行的解决方案,请随时提出他们。感谢您的帮助,希望我会很快成长为了解更多关于REST风格web服务。

分析解答

想想HTML实际上可能是在post.text

编辑: 尝试用这些头文件的要求:

...
user_agent_str = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " \
                 + "AppleWebKit/537.36 (KHTML, like Gecko) " \
                 + "Chrome/78.0.3904.97 " \
                 + "Safari/537.36"

content_type_str = "application/json"

headers = {
    "user-agent": user_agent_str,
    "content-type": content_type_str

}
...

另一个编辑:

我不知道如果requests已经处理了这一点,但有效载荷是无效JSON。您也可以尝试使用双,而不是单引号。