Вход на Amazon и доступ к заказам - PullRequest
0 голосов
/ 07 мая 2020

Проблема: Я читал статьи в течение нескольких дней и пытаюсь войти в свою учетную запись Amazon с python. Но каждый раз я терплю поражение. Поскольку каждая статья имеет свой подход, очень сложно найти потенциальный источник ошибки. Тем более, что многие статьи старше 2-3 лет. Я думаю, что с моей нынешней точки зрения наиболее простой способ - использовать BeautifulSoup bs4 и requests. Какой парсер является лучшим - это еще одно обсуждение, но я видел html.parser, html5lib и lxml, поскольку большинство статей, связанных с входом в систему Amazon, работают с html.parser, это тот, который сейчас в моем коде, даже если я хотел бы используйте lxml или html5lib позже. Все виды ввода и обратной связи помогают обобщить все важные моменты и изменения. В настоящее время я пытаюсь перейти на страницу входа через 'https://www.amazon.de/gp/css/order-history?ref_=nav_orders_first', так как 'https://www.amazon.de/ap/signin' выдает ошибку, по крайней мере, в моем браузере. Итак, я перехожу на страницу, где пользователю нужно войти в систему (мои заказы), чтобы перенаправить его на страницу входа и попытаться войти там. Есть ли возможность снова выйти из системы при создании нового requests на другом дочернем сайте, например при переключении страниц? Кроме того, я нашел статью, в которой with requests.Session() as s: - это лучший способ request сайта по сравнению с отсутствием намерения и Session(). Я, кстати, использую "de" в URL-адресе, но вы можете заменить это на "com", я думаю.

Текущий код:

import bs4
from bs4 import BeautifulSoup
import requests

amazon_orders_url = r'https://www.amazon.de/gp/css/order-history?ref_=nav_orders_first'  # First time visit login
amazon_login_url = r'https://www.amazon.de/ap/signin'  # Not working by browser access

credentials = {'email': "EMAILADRESS", "password": "PASSWORD"}

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'accept-language': 'en,de-DE;q=0.9,de;q=0.8,en-US;q=0.7',
    'referer': 'https://www.amazon.de/ap/signin'}

# print(credentials['email'])  # print Email address

with requests.Session() as s:
    s.headers = headers
    site = s.get(amazon_orders_url)  # , headers=headers

    # HTML parsing
    soup = BeautifulSoup(site.content, "html.parser")  # Alternative "html5lib" / , "html.parser" / , "lxml"

    # Print whole page
    # print(soup)

    # Check if Anmelden/Login exists
    for div in soup.find_all('div', class_='a-box'):
        headline = div.h1
        print(headline)

    signin_data = {s["name"]: s["value"]
                   for s in soup.select("form[name=signIn]")[0].select("input[name]")
                   if s.has_attr("value")}

    # signin_data = {}
    # signin_form = soup.find('form', {'name': 'signIn'})
    # for field in signin_form.find_all('input'):
    #     try:
    #         signin_data[field['name']] = field['value']
    #     except:
    #         pass

    signin_data[u'email'] = credentials['email']
    signin_data[u'password'] = credentials['password']

    post_response = s.post('https://www.amazon.de/ap/signin', data=signin_data)

    soup = BeautifulSoup(post_response.text, "html.parser")

    warning = soup.find('div', {'id': 'message_warning'})
    # if warning:
        # print('Failed to login: {0}'.format(warning.text))

    print(soup)
    # print(post_response.content)
...