Python请求和表单按钮交互问题

时间:2016-11-08 17:39:36

标签: python python-3.x python-requests

我每天从Packt Publishing获得一本免费电子书,其中包括“免费学习 - 免费技术电子书”促销。我正在尝试自动化这个过程。我根据他们的根路径登录进行登录,之后我在促销URL上进行了GET并使用BeautifulSoup 4来获取“声明你的免费电子书”链接的HREF,现在我被卡住了。这是代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests
from bs4 import BeautifulSoup

USERNAME = 'email@email.com'
PASSWORD = 'secret'
BASE_URL = 'https://www.packtpub.com'
PROMO_URL = 'https://www.packtpub.com/packt/offers/free-learning'

session = requests.session()
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
session.post(BASE_URL, {"username": USERNAME, "password": PASSWORD}, headers=headers)

response = session.get(PROMO_URL, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
current_offer_href = BASE_URL + soup.find("div", {"class": "free-ebook"}).a['href']
print(current_offer_href)
print(session.post(current_offer_href, headers=headers))

current_offer_href保持正确的价值,如果你今天去了网站(8 / NOV / 2016)并检查你会发现的按钮:

enter image description here

在这种情况下,我的current_offer_href持有https://www.packtpub.com/freelearning-claim/21558/21478

如果我在代码中尝试对current_offer_href进行POST,则会收到<Response [404]>。实际上我应该得到的是重定向到https://www.packtpub.com/account/my-ebooks,因为如果我在网站上手动点击按钮会发生这种情况。这有什么不对?

1 个答案:

答案 0 :(得分:0)

您是基于您的用户代理的过滤服务器端。解决问题更改用户代理。