如何使用Python请求启用cookie?

时间:2017-11-04 08:13:26

标签: python cookies web-scraping

我想用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)

3 个答案:

答案 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()