我想用Python登录Amazon.com。 但即使我使用requests.Session(),我也无法做到,因为我无法启用Cookies"。
你能告诉我如何修复代码吗?为什么" dict(response.cookies)"返回空?
# creating all input tag information (hidden tags are included)
# {'pageId': 'ape:dXNmbGV....'email': 'xxx@xxx', 'password': 'xxx', 'create': '0'}
def create_signin_data(res, user, pass) -> str:
bs = BeautifulSoup(res.content, "html.parser")
signin_data = {s["name"]: s["value"]
for s in bs.select("form[name=signIn]")[0].select("input[name]")
if s.has_attr("value")}
signin_data[u"email"] = user
signin_data[u"password"] = pass
return signin_data
signin_url ="https://www.amazon.com/ap/signin?_encoding=UTF8&........."
action_url ="https://www.amazon.com/ap/signin"
### create session
session = requests.Session()
res = session.get(signin_url)
# res = session.get(signin_url, cookies = res.cookies) -> the result is the same
cookie_data = dict(response.cookies) # empty dict {}
### sign in
signin_data = create_signin_data(res, "user@addr", "pass")
res = session.post(signin_url, signin_data)
# res = session.post(action_url, signin_data) -> the result is the same
# res = session.post(signin_url, signin_data, cookies=cookie_data ) -> the result is the same
print(res.content)
最后一个输出(html)-----------------
请启用Cookie继续
要继续在Amazon.com购物,请在您的Web浏览器中启用Cookie。
在浏览器中启用cookie后,请单击下面的按钮返回上一页。
我想获得登录后首页(您的Amazon.com)
答案 0 :(得分:0)
res = s.get('https://mysite[dot]com')
cookies = dict(res.cookies)
res = s.post('https://login[dot]mysite[dot]com', auth=('Email', 'Password'), verify=False,
cookies=cookies)
你可以通过post()调用传递cookie。
答案 1 :(得分:0)
您对requests.Session()
的使用是正确的,因此我认为问题不在于使用Cookie,而在于您的登录信息。像亚马逊和Facebook这样的网站有时需要表单元数据以及您当前未传递的登录Web请求。如果我是对的,this answer应该可以帮助你。
答案 2 :(得分:0)
最后我找不到答案...... 相反,我使用" Selenium"我可以轻松地做到。
driver = Chrome(DRIVER_PATH)
driver.get(TOP_URL)
driver.find_element_by_id(SIGNIN_BUTTON).click()
driver.find_element_by_id(MAIL).send_keys(user_name)
elem_pass = driver.find_element_by_id(PASSWORD)
elem_pass.send_keys(user_password)
elem_pass.submit()