我试图从我的学校页面上抓取一些信息,但我很难通过登录。我知道有类似的线程,我花了一整天的时间阅读,但无法使其发挥作用。
这是我使用的程序(用户名和密码已更改):
import requests
payload = {'ctl00$cphmain$Loginname': 'name', 'ctl00$cphmain$TextBoxHeslo': 'password'}
page = requests.post('http://gymnaziumbma.no-ip.org:81/login.aspx', payload)
open_page = requests.get("http://gymnaziumbma.no-ip.org:81/prehled.aspx?s=44&c=prub")
#Check content
if page.text == open_page.text:
print("Same page")
else:
print(open_page.text)
print("Different page!")
你能告诉我,我做错了什么吗?我是否缺少一些参数? requests 是个好方法吗?我正在尝试 robobrowser 和 BeautifulSoup,但也不起作用。我敢打赌我错过了一些非常微不足道的东西。
我使用Python 3.5
首先,你没有使用Session http://docs.python-requests.org/en/master/user/advanced/#session-objects因此,即使您的第一篇文章成功地将您登录到第二篇文章中,您也对此一无所知。其次,您缺少需要发布的数据,__视图状态生成器 and __视图状态您可以使用以下命令从源中解析它美丽汤:
from bs4 import BeautifulSoup
data = {'ctl00$cphmain$Loginname': 'name', 'ctl00$cphmain$TextBoxHeslo': 'password'}
# A Session object will persist the login cookies.
with requests.Session() as s:
page = s.get('http://gymnaziumbma.no-ip.org:81/login.aspx')
soup = BeautifulSoup(page.content)
data["___VIEWSTATE"] = soup.select_one("#__VIEWSTATE")["value"]
data["__VIEWSTATEGENERATOR"] = soup.select_one("#__VIEWSTATEGENERATOR")["value"]
s.post('http://gymnaziumbma.no-ip.org:81/login.aspx', data=data)
open_page = s.get("http://gymnaziumbma.no-ip.org:81/prehled.aspx?s=44&c=prub")
#Check content
if page.text == open_page.text:
print("Same page")
else:
print(open_page.text)
print("Different page!")
您可以查看 Chrome 开发工具中发布的所有表单数据。
上面发布的内容应该足以登录,如果没有任何您需要的值可以使用 BeautifulSoup 从登录表中解析。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)