无法使用 Python 登录亚马逊

Posted

技术标签:

【中文标题】无法使用 Python 登录亚马逊【英文标题】:Unable to log in to Amazon using Python 【发布时间】:2016-07-29 00:48:45 【问题描述】:

我正在使用 Python 3 编写脚本来登录亚马逊以获取我的 Kindle 亮点。基于这篇文章:https://blog.jverkamp.com/2015/07/02/scraping-kindle-highlights/

我无法成功登录,而是收到一条消息,提示启用 cookie 以继续:

<RequestsCookieJar[<Cookie ubid-main=189-4768762-8531647 for .amazon.com/>]>
Failed to login: 

Please Enable Cookies to Continue

To continue shopping at Amazon.com, please enable cookies in your Web browser.
Learn more about cookies and how to enable them.

我已经包含了处理 cookie 的请求会话,但它似乎不起作用。

这是我用来尝试执行此操作的代码:

import bs4, requests

session = requests.Session()
session.headers = 
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/49.0.2623.110 Safari/537.36'


# Log in to Amazon, we have to get the real login page to bypass CSRF
print('Logging in...')
response = session.get('https://kindle.amazon.com/login')

soup = bs4.BeautifulSoup(response.text, "html.parser")

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'ap_email'] = 'myemail'
signin_data[u'ap_password'] = 'mypassword'


response = session.post('https://www.amazon.com/ap/signin', data = signin_data)

soup = bs4.BeautifulSoup(response.text, "html.parser")

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

我在使用会话时有什么遗漏吗?

【问题讨论】:

【参考方案1】:

2020 - 此代码将不再有效。亚马逊已将 javascript 添加到其登录页面,如果不执行,则会导致此序列失败。检索到的页面将声明 cookie 未启用,即使它们已启用并且可以正常工作。同时发送用户名和密码会产生一个包含验证码的验证页面响应。在第二次交换中发送用户名然后发送密码会导致回复“出现问题”并且会再次询问用户名/密码。亚马逊识别出 JavaScript 没有被执行。

【讨论】:

有什么办法可以找回cookie吗?【参考方案2】:

您的登录表单数据实际上不正确,应该是电子邮件密码

signin_data[u'email'] = 'your_email'
signin_data[u'password'] = 'your_password'

您也可以避免尝试使用 css select 和 has_attr:

import bs4, requests

headers = 
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36'


from bs4 import BeautifulSoup

with requests.Session() as s:
    s.headers = headers
    r = s.get('https://kindle.amazon.com/login')
    soup = BeautifulSoup(r.content, "html.parser")
    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[u'email'] = 'your_em'
    signin_data[u'password'] = 'pass'

    response = s.post('https://www.amazon.com/ap/signin', data=signin_data)
    soup = bs4.BeautifulSoup(response.text, "html.parser")
    warning = soup.find('div', 'id': 'message_warning')
    if warning:
        print('Failed to login: 0'.format(warning.text))
    print(response.content)

输出的第一行,最后可以看到&lt;title&gt;Amazon Kindle: Home&lt;/title&gt;

b'<?xml version="1.0" encoding="utf-8"?>\n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">\n  <head>\n    <title>Amazon Kindle: Home</title>\n  

如果它仍然无法正常工作,您应该更新您的 requests 版本,并可能尝试另一个用户代理。一旦我更改了ap_emailap_password,我就可以正常登录了。

【讨论】:

感谢您的回复。我根据您的建议更新了代码,但仍然出现同样的错误。 @tjm,代码运行正常,你用的是什么版本的bs4请求? 我使用的是 bs4 0.0.1。我接受了您的建议并删除了尝试。这似乎成功了,现在我得到了 Amazon Kindle: Home html。谢谢! 我总是收到错误:`TypeError: select() missing 1 required positional argument: 'selector'

以上是关于无法使用 Python 登录亚马逊的主要内容,如果未能解决你的问题,请参考以下文章

突然无法使用 EC2 亚马逊服务器登录 filezilla

AWS亚马逊EC2出现#2002无法登录MySQL服务器

无法使用有效的用户名和密码登录 django 管理页面

无法在 AWS(亚马逊网络服务)上登录解析仪表板

GIT账号过期,无法重新登录

使用python的putty登录时无法设置标题。