首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Python登录亚马逊子公司Audible.com

如何使用Python登录亚马逊子公司Audible.com
EN

Stack Overflow用户
提问于 2019-02-11 07:56:31
回答 1查看 308关注 0票数 2

我想要刮声音网站使用Python美丽的汤。有一些数据我无法访问,除非我登录到我的音频帐户。它是Amazon.com的子公司。我一直没有成功。我只想使用Python登录并抓取html。

我已经尝试了各种代码,比如这个How to login to Amazon using BeautifulSoup。有人会认为,在这段代码中简单地替换我的凭据就可以了。

EN

回答 1

Stack Overflow用户

发布于 2020-05-11 13:40:21

不幸的是,在Python中这不再是简单的自动化。这是我用Audible AU所能达到的最大值。POST需要一堆标头,其中大多数都可以提取,除了metadata1 (在底部有更多信息):

代码语言:javascript
复制
"""load packages"""
import requests
from bs4 import BeautifulSoup
from urllib.parse import urlsplit, parse_qs

"""define URL where login form is located"""
site = "https://www.audible.com.au/signin"

"""initiate session"""
session = requests.Session()

"""define session headers"""
session.headers = {
    "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-encoding": "gzip, deflate, br",
    "accept-language": "en-US,en;q=0.9,cs;q=0.8",
    "sec-fetch-dest": "document",
    "sec-fetch-mode": "navigate",
    "sec-fetch-site": "none",
    "upgrade-insecure-requests": "1",
    "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36",
    "metadata1": "",
}

"""get login page"""
resp = session.get(site)
html = resp.text

"""extract clientContext from the login page"""
query = urlsplit(resp.url).query
params = parse_qs(query)
clientContext = params["clientContext"]
new_login_url = "https://www.amazon.com.au/ap/signin/" + str(clientContext[0])

"""get BeautifulSoup object of the html of the login page"""
soup = BeautifulSoup(html, "lxml")

"""scrape login page to get all the needed inputs required for login"""
data = {}
form = soup.find("form", {"name": "signIn"})
for field in form.find_all("input"):
    try:
        data[field["name"]] = field["value"]
    except:
        pass

"""add username and password to the data for post request"""
data[u"email"] = "EMAIL"
data[u"password"] = "PASSWORD"

"""display: redirect URL, appActionToken, appAction, siteState, openid.return_to, prevRID, workflowState, create, email, password"""
print(new_login_url, data)

"""submit post request with username / password and other needed info"""
post_resp = session.post(new_login_url, data=data, allow_redirects=True)
post_soup = BeautifulSoup(post_resp.content, "lxml")

"""check the captcha"""
warning = post_soup.find("div", id="auth-warning-message-box")
if warning:
    print("Warning:", warning)
else: print(post_soup)

session.close()

4849行上添加您的电子邮件地址和密码。另外,使用浏览器登录并检查流量,以查看计算机上的metadata1,并将其添加到22行。如果你很幸运,你不会被检测到是机器人,你会进入,否则你会得到验证码图像。

metadata1是base64中的一个巨大的有效负载,它由浏览器收集的数据组成,这些数据唯一地识别你,并将你与机器人区分开来(鼠标点击、输入延迟、页面脚本、浏览器信息和兼容性&扩展、flash版本、用户代理、脚本性能、硬件图形处理器、本地存储、画布大小等)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54622367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档