53667


PinterestというwebサイトにPythonを使用しログインまでできたのですが、セッションが上手く保たれていないのか。実行したいことまで上手く行きません。

**やりたいこと**  
<https://www.pinterest.jp/r/pin/554505772869102844/4995915543595742901/ab9290928e62760b540f32156fb9686925897abcbda51275fe2866dd3442d330>  
このURLにアクセスするとリダイレクトされて下記のURLに飛びます。  
<https://www.behance.net/gallery/67141435/X-O-Highlight-Messenger>  
このURLをrequestsの`.url`で取得したいのですが、Pinterestにログインなしでアクセスするとリダイレクトされない仕様になっています。

なので下記のコードでログインまで行きました。

[code]

    import requests
    
    
    ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
    
    headers = {'User-Agent': ua}
    
    
    payload = {'username_or_email':'xxxxx@mail.com', 'password':'xxxxxxxxx'}
    login_url = 'https://accounts.pinterest.com/v3/login/handshake/'
    
    def login(login_url, payload):
        s = requests.Session()
        p = s.post(login_url, data=payload)
        r = s.get('https://www.pinterest.jp/r/pin/554505772869102844/4995915543595742901/ab9290928e62760b540f32156fb9686925897abcbda51275fe2866dd3442d330')
        print(p.status_code)
        print(r.url)
    
    login(login_url, payload)
    
[/code]

status_codeは200とログインはできているようです。

**助けて頂きたい事**  
ここで問題にはまっています。一度、ブラウザ側でアクセスした後このプログラムを実行すると上手くリダイレクト先のURLを取得できます。  
しかし、しばらく時間を置くとプログラムからログインはできてもリダイレクトされません。  
毎回、ブラウザでログイン後にプログラムを走らせるのは手間が掛かるのでプログラムのみで動作させたいです。

**最後に**  
cookieを付与して（返ってきたcookieをそのまま返す？）アクセスしてみたり、色々やってみましたがもうわかりません。  
ブラウザに保存される何かをサーバに送り返してセッションか何かを保った状態をキープしないといけないと考えているのですが、何かわかりません。デベロッパーツールのNetworkを見たりして見たのですが、どこに注目してよいのか分かりません。  
なので質問させて頂きます。  
seleniumはできる限り使用したくないです。  
贅沢いって申し訳ありません。  
ご教授お願いします。


CC BY-SA 4.0
2019-03-23T05:05:24.890
53665
2019-03-23T07:49:26.327
22565
question
python html python3 cookie session
Pythonでrequestsを使用してログインしたい。


だいぶ愚直な手段になりますが、ログインした後にリダイレクトが発生するまで取得し続けるというのはいかがでしょうか。

[code]

    from time import sleep
    import requests
    
    target_url = 'https://www.pinterest.jp/r/pin/554505772869102844/4995915543595742901/ab9290928e62760b540f32156fb9686925897abcbda51275fe2866dd3442d330'
    
    
    def login():
        with requests.Session() as s:
            r = requests.get(target_url)
            while r.url == target_url:
                print(".", end="")
                sleep(0.5)
                r = requests.get(target_url)
        return r.url
    
    
    def main():
        print(login())
    
    
    if __name__ == '__main__':
        main()
    
[/code]


CC BY-SA 4.0
2019-03-23T05:41:29.973
53667
2019-03-23T07:49:26.327
2019-03-23T07:49:26.327
29826
29826
53665
answer