我试图从我的学校页面中抓取一些信息,但我很难过去登录。我知道有类似的威胁,我花了一整天阅读,但不能使它工作。
这是程序即时使用(用户名和密码已更改):
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!")
你能告诉我,我做错了什么?我错过了一些参数吗?请求是否适合这个?我正在尝试使用robobrowser和BeautifulSoup,但也不起作用。我打赌我错过了一些非常微不足道的东西。
我正在使用Python 3.5
答案 0 :(得分:5)
首先,您没有使用Session,所以即使您的第一篇文章成功登录,第二篇文章对此也一无所知。其次,您缺少需要发布的数据, __ VIEWSTATEGENERATOR 和 __ VIEWSTATE ,您可以使用 BeautifulSoup 从源解析:
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从登录表中解析。