我试图访问一个网站以获取一些信息,但是我无法通过Python发布登录信息。这是我到目前为止的代码:使用请求模块无法登录到网站(Python版本3.5.1)
import requests
c = requests.Session()
url = 'https://subscriber.hoovers.com/H/login/login.html'
USERNAME = 'user'
PASSWORD = 'pass'
c.get(url)
csrftoken = c.cookies['csrftoken']
login_data = dict(j_username=USERNAME, j_password=PASSWORD,
csrfmiddlewaretoken=csrftoken, next='/')
c.post(url, data=login_data, headers=dict(Referer=url))
page = c.get('http://subscriber.hoovers.com/H/home/index.html')
print(page.content)
下面是从后登录页面的表单数据:
为j_username:用户 为j_password:通过 OWASP_CSRFTOKEN:8N0Z-TND5-NV71-C4N4-43BK -B13S-A1MO-NZQC OWASP_CSRFTOKEN:8N0Z-TND5-NV71-C4N4-43BK-B13S-A1MO-NZQC
这是我收到错误:
Traceback (most recent call last):
File "C:/Users/10023539/Desktop/pyscripts/webscraper ex.py", line 9, in <module>
csrftoken = c.cookies['csrftoken']
File "C:\Program Files (x86)\Python35-32\Lib\site-packages\requests\cookies.py", line 293, in __getitem__
return self._find_no_duplicates(name)
File "C:\Program Files (x86)\Python35-32\Lib\site-packages\requests\cookies.py", line 351, in _find_no_duplicates
raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path))
KeyError: "name='csrftoken', domain=None, path=None"
我相信这个问题与'OWASP_CSRFTOKEN'标签有关吗?我还没有找到任何在线任何地方的这个特定CSRF名称的解决方案。我也尝试删除c.cookies方法,并手动将CSRF代码输入到csrfmiddlewaretoken参数中。我也试着改变了referal的URL,仍然得到相同的错误。
任何援助将不胜感激。
你在哪里看到的表单数据?特别是'csrfmiddlewaretoken'? –
我在登录后从页面获取表单数据。我使用'csrfmiddlewaretoken',因为我在文档中看到了这个例子。我应该使用不同的东西吗?另外,如果您需要更多头部或其他信息,请告诉我,我很乐意发布。 – raidboss
是的,在实际表单数据中的名称,打开开发人员工具,你会看到你也张贴到不正确的网址,它是'https:// subscriber.hoovers.com/H/j_spring_security_check' ans'OWASP_CSRFTOKEN'是名称为csrf标记 –