0 python forms python-3.x python-requests
我正在尝试为我的大学网站制作一个网络刮板,但我无法通过登录页面.
import requests
URL = "https://login.ull.es/cas-1/login?service=https%3A%2F%2Fcampusvirtual.ull.es%2Flogin%2Findex.php%3FauthCAS%3DCAS"
USER = "myuser"
PASS = "mypassword"
payload = {
"username": USER,
"password": PASS,
"warn": "false",
"lt": "LT-2455188-fQ7b5JcHghCg1cLYvIMzpjpSEd0rlu",
"execution": "e1s1",
"_eventId": "submit",
"submit": "submit"
}
with requests.Session() as s:
r = s.post(URL, data=payload)
#r = s.get(r"http://campusvirtual.ull.es/my/index.php")
with open("test.html","w") as f:
f.write(r.text)
Run Code Online (Sandbox Code Playgroud)
该代码显然不起作用,我不知道错误在哪里,我尝试只在有效负载中放置用户名和密码(其他值在Web标记为隐藏的源代码中),但这也是失败.
谁能指出我正确的方向?谢谢.(对不起我的英语不好)
这"lt": "LT-2455188-fQ7b5JcHghCg1cLYvIMzpjpSEd0rlu"
是会话ID或某种反CSRF保护或类似(疯狂猜测:hmac-ed随机ID号).重要的是它不是一个常量值,您必须通过发出GET请求从同一URL读取它.
在GET
回复中你有类似的东西:
<input type="hidden" name="lt" value="LT-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" />
Run Code Online (Sandbox Code Playgroud)
此外,还有一个JSESSIONID
可能很重要的cookie.
这应该是你的流程:
URL
lt
参数和JSESSIONID
cookiepayload['lt']
领域URL
.提取cookie非常简单,请参阅requests
文档.
提取lt
参数有点困难,但您可以使用BeautifulSoup
包来完成.假设您在名为变量的响应中text
,您可以使用:
from BeautifulSoup import BeautifulSoup as soup
payload['lt'] = soup(text).find('input', {'name': 'lt', 'type': 'hidden'}).get('value')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
190 次 |
最近记录: |