Проблема: Я читал статьи в течение нескольких дней и пытаюсь войти в свою учетную запись 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)