如何使用请求登录instacart?

2024-03-29 13:44:00 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我尝试了以下粗略版本:

import requests
from bs4 import BeautifulSoup

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
    }

session = requests.Session()

res1 = session.get('http://www.instacart.com', headers=headers)
soup = BeautifulSoup(res1.content, 'html.parser')
token = soup.find('meta', {'name': 'csrf-token'}).get('content')
data = {"user": {"email": "user@gmail.com", "password": "xxxxx"},
        "authenticity_token": token}
res2 = session.post('https://www.instacart.com/accounts/login', headers=headers, data=data)
print(res2)

我总是遇到以下错误:

<Response [400]>
apparent_encoding:'ascii'
connection:<requests.adapters.HTTPAdapter object at 0x0000021F3FF8F940>
content:b'{"status":400,"error":"There was a problem in the JSON you submitted: Empty input () at line 1, column 1"}'

我做错了什么


Tags: importcomtokendatagetsessionwwwcontent
1条回答
网友
1楼 · 发布于 2024-03-29 13:44:00

实际上,对于POST请求,您缺少正确的Params

我已经向main站点发出了一个GET请求,以收集在POST请求中使用的必要的authenticity_token。然后对正确的loginurl发出POST请求

import requests
from bs4 import BeautifulSoup

params = {
    'source': 'web',
    'cache_key': 'undefined'
}

data = {
    'email': 'email@email.com',
    'grant_type': 'password',
    'password': 'yourpassword',
    'scope': '',
    'signup_v3_endpoints_web': 'null'
}

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0",
}


def main(url):
    with requests.Session() as req:
        r = req.get(url, headers=headers)
        soup = BeautifulSoup(r.content, 'html.parser')
        data['authenticity_token'] = soup.find(
            "meta", {'name': 'csrf-token'}).get("content")
        r = req.post(
            "https://www.instacart.com/v3/dynamic_data/authenticate/login", params=params, json=data, headers=headers).json()
        print(r)


main("https://www.instacart.com")

相关问题 更多 >