78415


下記のログイン機能付サイトでrequestを使ってログインしたいですが、  
うまくログイン出来ないです。  
python seleniumだとうまくログインできますが、  
下記のコードrequestだとうまく行かず、ログインボタンのところが引っかかります。。  
requestでログイン可能でしょうか。

※こちらのサイト参考にしました。  
[ログイン機能付サイトでスクレイピング【requests】【BeautifulSoup】](https://qiita.com/syunyo/items/36af8bcb501baf8c7014)

[ログイン出来ないサイト userlocal](https://auth.userlocal.jp/)

code

[code]

    import requests
    from bs4 import BeautifulSoup
    from urllib.parse import urljoin
    import urllib3
    from urllib3.exceptions import InsecureRequestWarning 
    urllib3.disable_warnings(InsecureRequestWarning)
    import warnings
    warnings.filterwarnings("ignore", category=UserWarning, module='bs4')
    import io
    
    # メールアドレスとパスワードの指定
    USER = "example@gmial.com"
    PASS = "1234567"
    
    # セッションを開始
    session = requests.session()
    
    # ログイン
    login_info = {
        "email":USER,
        "password":PASS,
        "commit":"ログイン"
    }
    
    # action
    url_login = "https://social-admin.userlocal.jp/accounts"
    res = session.post(url_login, data=login_info,verify=False)
    res.raise_for_status()
    
    print(res.text)
    
[/code]

エラー内容

[code]

    Traceback (most recent call last):
      File "c:/Users/example/Documents/example/example.py", line 31, in <module>
        res.raise_for_status()
      File "C:\Users\example\AppData\Local\Programs\Python\Python38-32\lib\site-packages\requests\models.py", line 941, in raise_for_status
        raise HTTPError(http_error_msg, response=self)
    requests.exceptions.HTTPError: 422 Client Error: Unprocessable Entity for url: https://social-admin.userlocal.jp/accounts
    
[/code]


CC BY-SA 4.0
2021-07-26T07:10:18.333
78409
2021-07-26T09:45:14.507
2021-07-26T08:06:53.760
18859
18859
question
python python3 python-requests
Pythonにてログイン機能付サイトでrequestsする方法


ブラウザの開発者ツールでリクエストを見てみると次のことがわかります。

  1. POSTするURLは`https://auth.userlocal.jp/login`
  2. POSTするデータには`authenticity_token`が含まれる

`authenticity_token`は例えば次のようにすれば手に入るはずです。

[code]

    url_accounts = "https://social-admin.userlocal.jp/accounts"
    res = session.get(url_accounts)
    
    soup = BeautifulSoup(res.text, 'html.parser')
    auth_token = soup.find('input', {'name': 'authenticity_token'}).get('value')
    
    
[/code]


CC BY-SA 4.0
2021-07-26T09:45:14.507
78415
2021-07-26T09:45:14.507
13199
78409
answer