使用pythonurllib2登录网站表单

2024-05-16 20:56:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我让breen尝试学习在Python中使用urllib2包。我试着以学生的身份(左边的表格)登录到数学学生的注册页面:http://reg.maths.lth.se/。我已经检查了代码(使用Firebug),左边的表单显然应该使用POST来调用,键名为pnr,其值应该是一个10个字符长的字符串(最后一部分可能在HTML代码中看不到,但它基本上是我的社会保险号,所以我知道它应该有多长)。注意,适当的POST方法的头中的action是另一个URL,即http://reg.maths.lth.se/login/student。在

我尝试过(在下面的例子中使用了一个假的pnr,但是我在自己的代码中使用了我的实数)。在

import urllib
import urllib2

url = 'http://reg.maths.lth.se/'
values = dict(pnr='0000000000')
data = urllib.urlencode(values)
req = urllib2.Request(url,data)
resp = urllib2.urlopen(req)
page = resp.read()

print page

在执行此操作时,打印的是原始页面http://reg.maths.lth.se/的源代码,因此似乎我没有登录。另外,我可以在values字典中添加任何键/值对,它不会产生任何错误,这在我看来很奇怪。在

另外,如果我转到页面http://reg.maths.lth.se/login/student,显然没有提交数据的POST方法。在

有什么建议吗?在


Tags: 方法代码httplogin页面urllib2regpost
1条回答
网友
1楼 · 发布于 2024-05-16 20:56:44

如果您在输入数字并提交表单时检查发送到服务器的请求是什么,您会注意到它是一个带有pnr_token参数的POST请求

enter image description here

您缺少需要从页面的HTML源中提取的_token参数。它是一个隐藏的input元素:

<input name="_token" type="hidden" value="WRbJ5x05vvDlzMgzQydFxkUfcFSjSLDhknMHtU6m">

我建议研究一下像^{}^{}^{}这样的工具可以简化表单提交。您也可以使用HTML解析器来解析HTML,比如BeautifulSoup,提取令牌并通过urllib2^{}发送:

^{pr2}$

相关问题 更多 >