【Python】Amazonにスクリプトでログインしようとした話

結果失敗していますが、一応調べたことを残しておきます。


Amazonにログインするには、次のフォームデータが必要らしいです。

['email', 'password', 'openid.return_to', 'prevRID', 'openid.pape.max_auth_age', 'openid.assoc_handle', 'openid.ns', 'openid.ns.pape', 'pageId', 'appActionToken', 'openid.identity', 'create', 'appAction', 'openid.mode', 'openid.claimed_id', 'metadata1']

しかし、最後のmetadata1がなんかいろんなことをやらないと取得できないらしく、このページに取り方が書いてあるっぽいのですが、正直めんどくさくなったので読んでないですw

この値はfwcim.profile();みたいな関数を呼べると生成できるらしいのですが、Amazonさんからはログインするなという強い意志が感じ取れましたしやめておきます・・・

ログインせずに目的を達成する方法がないかやってみようと思います。


以下、書きかけのコードを供養しておきます。

途中でNoneを返しているのはログインクッキーを返す予定だったからです。

#!/usr/bin/env python3.5
# -*- coding:utf-8 -*-

import requests
import re
import json
from bs4 import BeautifulSoup


def exec_login(auth):
    username = auth["username"]
    password = auth["password"]
    session = requests.session()
    # トップページにアクセスしてクッキーとログインページURLを貰ってくる
    res = session.get("https://www.amazon.co.jp/")
    cookies = res.cookies
    urls = re.findall("a href='.*?'", res.text)
    url = None
    for url in urls:
        if "/gp/navigation/redirector.html" in url:
            break
        else:
            url = None
    if url is None:
        return None
    # ログインページにアクセスしてトークンを貰う
    res = session.get("https://www.amazon.co.jp/" + url[9:-1], cookies=cookies)
    cookies = res.cookies
    soup = BeautifulSoup(res.text, "html.parser")
    login_form = soup.find("form", {"name": "signIn"})
    login_url = login_form["action"]
    hidden_elems = login_form.find_all("input", {"type": "hidden"})
    # 送信パラメータに追加
    login_params = {}
    for elem in hidden_elems:
        login_params[elem["name"]] = elem["value"]
    login_params["email"] = username
    login_params["password"] = password
    # ログイン実行
    res = session.post(login_url, data=login_params, cookies=cookies)
    print(res.text)

if __name__ == "__main__":
    with open("./auth.json") as f:
        auth = json.loads(f.read())
    exec_login(auth)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です