如何在不使用硒等无头浏览器的情况下登录到morningstar.com? [英] How can I log in to morningstar.com without using a headless browser such as selenium?

查看:118
本文介绍了如何在不使用硒等无头浏览器的情况下登录到morningstar.com?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我阅读回答以下问题:
如何使用登录到网站Python的Requests模块?



答案为:
首先检查登录表单的来源以获取三条信息 - 表单发布的URL以及用户名和密码字段的名称属性。



我怎样才能看到,这个morningstar.com页面的用户名和密码的名称属性是什么?
https://www.morningstar.com/members/login.html



我有以下代码:

 导入请求

url ='http://www.morningstar.com/members/login.html'
url ='http://beta.morningstar.com'

与开放('morningstar.txt')作为f:
用户名,密码= f.read()。splitlines()

with requests.Session()as s:
有效载荷= login_data = {
'用户名':用户名,
'密码':密码,
}
p = s.post(url,data = login_data)
print (p.text)

但是 - 其中包括 - 打印:



此分配未配置为允许用于此请求的HTTP请求方法。



什么应该 url data 用于 post



还有另外一个answer ,它使用了 selenium ,但可以避免这种情况吗?

解决方案

这很困难,我不得不使用拦截代理,但是这里是:

 进口请求

s = requests.session()
auth_url ='https://sso.morningstar.com/ sso / json / msusers / authenticate'
login_url ='https://www.morningstar.com/api/v2/user/login'
username ='username'
password ='password '
$ b $ header = {
'访问控制请求方法':'POST',
'访问控制请求头部':'content-type,x -openam-password,x-openam-username',
'Origin':'https://www.morningstar.com'
}
s.options(auth_url,headers = headers)

headers = {
'Referer':'https://www.morningstar.com/members/login.html',
'Content-Type':'application / json',
'X-OpenAM-Username':用户名,$ b $'X-OpenAM-Password':密码,$ b $'Origin' :'https://www.morningstar.com',
}
s.post(auth_url,headers = headers)

data = {productCode:DOT_COM ,rememberMe:False}
r = s.post(login_url,json = data)

print(s.cookies)
print(r.json())

现在您应该拥有经过验证的会话。您应该在 s.cookies 中看到一堆cookie,并在 r.json()

I read the answer to the question: "How to "log in" to a website using Python's Requests module?"

The answer reads: "Firstly check the source of the login form to get three pieces of information - the url that the form posts to, and the name attributes of the username and password fields."

How can I see, what the name attributes for username and password are for this morningstar.com page? https://www.morningstar.com/members/login.html

I have the following code:

import requests

url = 'http://www.morningstar.com/members/login.html'
url = 'http://beta.morningstar.com'

with open('morningstar.txt') as f:
    username, password = f.read().splitlines()

with requests.Session() as s:
    payload = login_data = {
        'username': username,
        'password': password,
        }
    p = s.post(url, data=login_data)
    print(p.text)

But - among other things - it prints:

This distribution is not configured to allow the HTTP request method that was used for this request. The distribution supports only cachable requests.

What should url and data be for the post?

There is another answer, which makes use of selenium, but is it possible to avoid that?

解决方案

This was kind of hard, i had to use an intercepting proxy, but here it is:

import requests

s = requests.session()
auth_url = 'https://sso.morningstar.com/sso/json/msusers/authenticate'
login_url = 'https://www.morningstar.com/api/v2/user/login'
username = 'username'
password = 'password'

headers = {
    'Access-Control-Request-Method': 'POST',
    'Access-Control-Request-Headers': 'content-type,x-openam-password,x-openam-username',
    'Origin': 'https://www.morningstar.com'
}
s.options(auth_url, headers=headers)

headers = {
    'Referer': 'https://www.morningstar.com/members/login.html',
    'Content-Type': 'application/json',
    'X-OpenAM-Username': username,
    'X-OpenAM-Password': password,
    'Origin': 'https://www.morningstar.com',
}
s.post(auth_url, headers=headers)

data = {"productCode":"DOT_COM","rememberMe":False}
r = s.post(login_url, json=data)

print(s.cookies)
print(r.json())

By now you should have an authenticated session. You should see a bunch of cookies in s.cookies and some basic info about your account in r.json().

这篇关于如何在不使用硒等无头浏览器的情况下登录到morningstar.com?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆