2017-04-06 24 views
0

次のPythonコードを使用して私のアカウントにログインしようとしています。ログインプロセスは2つのステップで2つのページに分かれています。最初にログインを入力し、2番目にパスワードを入力します。私はのpython3を使用しています:ここでPython:リクエストでロギングしてHTTPリクエストを実行しようとしています

from bs4 import BeautifulSoup 
import requests, lxml.html 

with requests.Session() as s: 
    #First login page 
    login = s.get('https://accounts.ft.com/login') 
    login_html = lxml.html.fromstring(login.text) 
#getting the form inputs 
    hidden_inputs = login_html.xpath(r'//form//input') 
    form = {x.name: x.value for x in hidden_inputs} 
#filling inputs with email 
    form['email'] = '[email protected]' 
    response = s.post('https://accounts.ft.com/login', data=form) 
# Receive reponse 200 

#Second login page 
    login_html = lxml.html.fromstring(response.text) 
#getting inputs 
    hidden_inputs = login_html.xpath(r'//form//input') 
    form = {x.name: x.value for x in hidden_inputs} 
#filling inputs with email and password 
    form['email'] = '[email protected]' 
    form['password'] = 'p****word' 
    response = s.post('https://accounts.ft.com/login', data=form) 
#Receive reponse 200 

#Trying to read an article being loggedIn 
    page = s.get('https://www.ft.com/content/173695cc-1a98-11e7-a266-12672483791a') 
    soup = BeautifulSoup(page.content, 'html.parser') 
    print(soup.prettify()) 
# data-next-is-logged-in="false" => Please Register to read this page... 
  • は、フォームが次のようになります。ここでは

<div class="js-container" data-component="two-step-login-form" id="content"> 
 
    <div class="lgn-box"> 
 
    <form action="/login/submitEmail" class="js-email-lookup-form" data-test-id="enter-email-form" method="POST" name="enter-email-form" novalidate=""> 
 
     <input name="location" type="hidden" value="" /> 
 
     <input name="continueUrl" type="hidden" value="" /> 
 
     <input name="readerId" type="hidden" value="" /> 
 
     <input name="loginUrl" type="hidden" value="/login" /> 
 
     <div class="lgn-box__title"> 
 
     <h1 class="lgn-heading--alpha"> 
 
      Sign in 
 
     </h1> 
 
     </div> 
 
     <div class="o-forms-group"> 
 
     <label class="o-forms-label" for="email"> 
 
     Email address 
 
     </label> 
 
     <input autocomplete="off" autofocus="" class="o-forms-text js-email" id="email" maxlength="64" name="email" required="" type="email"> 
 
     <input id="password" name="password" style="display:none" type="password"> 
 
     <label for="password"> 
 
     </label> 
 
     </input> 
 
     </input> 
 
     </div> 
 
     <div class="o-forms-group"> 
 
     <button class="o-buttons o-buttons--standout o-buttons--big" name="Next" type="submit"> 
 
     Next 
 
     </button> 
 
     </div> 
 
    </form> 
 
    </div>

  • はどのようなものか、私のデータがPOSTに合格しています:

    フォーム { 'パスワード': 'P ****語'、 'continueUrl': ''、 'loginUrl': '/ログイン'、 'メール': '[email protected]' 'readerId': ''、 '場所': ''}

  • 第1及び第2 logginページ200応答の両方のためのPOST要求戻ります。しかし、私はまだログインしていないですようです。

  • 私は405不正な要求エラー

  • を返し、POST要求のURLとしてhttp://accounts.ft.com/sso/[email protected]を使用してみましたが、私は私が実際に記録されておりませんことを確認していません、芽私はそれをどのように監視するか分かりません。

  • ウェブブラウザでないとウェブサイトがログインできない可能性はありますか?

+0

あなたはセレンのようなものを使用してに見たことが自分で提供しています見出しAPIの両方がありますか? FTが自動アクセスをブロックする可能性があります(ヘッダにユーザエージェントを設定してみてください) – zhqiat

+0

ログイン要求の送信後にクッキーが返されますか?私はあなたが認証しようとしているサイトがどのように認証を処理しようとしているのかよく分かりませんが、リクエスト間でセッションを維持していないと仮定しているので、2回目のGETリクエストで認証されたセッションCookieがヘッダにありません。 –

+0

あなたの答えをありがとう。あなたは正しかった@Allen、2番目のGETリクエストは間違っていたが、FTはブラウザ外からの接続をブロックしている。いくつかのJavaScriptコードはすべてのログイン段階の後に実行しなければならず、PythonのためにQtを使用してもarroundには行かない... – ylnor

答えて

1

seleniumを使用して、FTが自動化されたアクセスをブロックするように見えるようにWebブラウザをシミュレートしてみてください。

archive.isなどのサイトがアーカイブされているかどうかを確認することもできます。これにより、ほとんどのサイトがより使いやすい設定になります。

最後に、データマイニングAPIとFTはdeveloper page

関連する問題