2017-05-30 5 views
0

私はmintos.comにログインし、ログインの成功後に表示されるアカウント概要ページをhtmlファイルに保存する小さなソフトウェアを作成しようとしています。いくつかのアプローチを試しましたが、これは私の現在のバージョンです。Mintos.com login with python requests

import requests 
import sys 
import codecs 

sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach()) 

username = 'abc' 
password = '123' 

loginUrl = 'https://www.mintos.com/en/login' 

resp = requests.get(loginUrl, auth=(username, password)) 
file = codecs.open("mint.html", "w", "UTF-8") 
file.write(resp.text) 
file.close() 

私は、コードを実行すると、私は元のページではなく、ログインしたときに、私が得るべきものを保存します。私は他の多くはありません...私は意味(私がログインをめちゃくちゃだと思います混乱する)。私はすでにこの問題に恥ずかしいほどの時間を費やしていました。

編集:_csrf_token

with requests.session() as s: 
    resp = s.get(loginUrl) 
    toFind = '_csrf_token" value="' 
    splited = resp.text.split(toFind)[1] 
    _csrf_token = splited.split('"',1)[0] 
    payload = {"_username": _username, "_password": _password, "_csrf_token": _csrf_token} 

    final = s.post(loginUrl, data = payload) 
    file = codecs.open("mint.html", "w", "UTF-8") 
    file.write(final.text) 
    file.close() 

で別の非作業バージョンは、この時間しかし、私はまだ同じ結果を得る:

import requests 
import sys 
import codecs 

sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach()) 

loginUrl = "https://www.mintos.com/en/login"; 
username = "abc" 
password = "123" 
payload = {"username": username, "password": password} 


with requests.session() as s: 
    resp = s.post(loginUrl, data = payload) 
    file = codecs.open("mint.html", "w", "UTF-8") 
    file.write(resp.text) 
    file.close() 

編集2: 私はまたの線に沿って何かを試してみました。ダウンロードしたページは、私が抽出したのと同じトークンを持っています。

最終編集:私はそれを作って、今は馬鹿だと感じる。私は私のloginUrlとして「『https://www.mintos.com/en/login/check』を使用する必要がありました。

答えて

1

authパラメータはほとんどのウェブサイトを使用するものではありませんHTTPBasicAuthのためだけ速記、である。それらのほとんどは、ログイン/情報を格納するために、クッキーやセッションデータを使用しますあなたのコンピュータ上であなたがページをブラウズしている間あなたが誰であるかを確認することができます。

ウェブサイトにログインできるようにするには、ログインフォームでPOSTリクエストをしてからあなたが送信するクッキーを保存し(そして毎回返す)、また、これには "反ボトムフィルタ"がないことを意味します(実際のブラウザを使わずにログインすることはできません。少なくとも簡単ではない)

+0

認知度については気づかなかったので、よく知っておいてください。私はalredyこの線に沿って何かを試してみた:インポートは、インポート コーデック sys.stdoutの= codecs.getwriter( "UTF-8")(sys.stdout.detach()) loginUrl = " インポートsysを要求しますhttps://www.mintos.com/en/login "; 名= "ABC" パスワード= "123" ペイロード= Sとして{ "ユーザ名":ユーザ名、 "パスワード" パスワード} requests.sessionと (): \t RESP = s.post(loginUrl、データ=ペイロード) \tファイル= codecs.open( "mint.html"、 "W"、 "UTF-8") \t file.write(resp.text) \t file.close()しかし、それはしませんでしたいずれかの作業。 – Daniel

+0

私は試したPOSTでバージョンを追加するようにOPを更新しました。 – Daniel

+0

これは動作しません。非難するものではありませんが、HTMLフォームの仕組みを知っていますか? mintos.comのフィールドには '_username'と' _password'というフィールドがあり、 'username'と' password'の値を与えています... –