使用Python的“请求”模块登录ASP网站

丹尼尔·冈卡

我试图从我的学校页面上搜集一些信息,但是我很难过去登录。我知道也有类似的问题,我花了一整天时间阅读,但无法使其正常工作。

这是程序即时通讯使用(用户名和密码已更改):

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

帕德拉克·坎宁安

首先,您没有使用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从登录表中解析出您不需要的任何值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章