问题:
我已经读了几天关于低谷的文章,并尝试使用python登录到我的亚马逊帐户。但是我每次都失败。由于每篇文章都有不同的方法,因此很难找到潜在的错误源。特别是因为很多文章都超过2-3年。
我认为从目前的角度来看,最直接的方法是使用BeautifulSoup
bs4
和requests
。哪个解析器是最好的解析器,这是另一个讨论,但是我已经看到html.parser
,html5lib
和lxml
,因为大多数与亚马逊登录有关的文章都在与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()
网站的一种更好的方法。我正在URL中使用“ de”,但是我想可以将其与“ 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)