登录一个网站与python,我尝试了很多例子,但我做错了什么



我知道这里有很多例子解释如何使用Python登录网站,但我在过去的3天里一直在尝试,我没有设法得到任何工作。这可能是因为Python对我来说是全新的,所以请原谅我的无知。

最吸引我的方式是使用请求,因为这似乎是最短的方式。

我在这个网站上做了一个测试帐户,所以你们可以测试自己的东西,如果你喜欢:

import requests
# variables
login_url = 'http://www.helifreak.com/'
username = 'testsubject'
password = 'password123'
login_data = {'vb_login_username' : username, 'vb_login_password' : password}

# making headers to look like a web browser
hf_headers = {'User-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36'}
# creation of the session and login
s = requests.Session()
login = s.post(login_url, data=login_data, headers=hf_headers)
# printing the output to check if the login worked
print login.content

在这个例子中,打印出来的内容似乎表明我没有登录。

我觉得问这个问题有点不好,考虑到有很多例子可以帮助我,但这真的让我发疯,我只是不明白为什么它不起作用。

我唯一能想到的是,我的login_data定义了输入的"name",而我看到过几个人使用该输入的"id"。虽然,我的页面似乎没有密码或用户名输入的"id",我也在这里阅读使用"名称"是好的。

结论:我很困惑。任何帮助都将非常感激。

谢谢。

查看了您提供的HTML源代码后,我意识到您应该发布到的URL是:

http://www.helifreak.com/login.php

你需要做的第二件事是弄清楚md5hash函数在做什么,并在POST之前在你的Python程序中做同样的事情。

我刚刚找到md5hash函数的位置。它在这里定义:http://www.helifreak.com/clientscript/vbulletin_md5.js。他们所做的是使用MD5算法对表单字段进行哈希,然后将哈希值分配给字段的值。如果你想成功登录,你需要在Python中做同样的事情。

这里有一个解决方案。这比我想象的要简单,但是您需要使用mechanize (sudo pip install mechanize),因为如果使用'requests',您需要填写许多隐藏字段:

>>> import md5
>>> import mechanize
>>> br = mechanize.Browser()
>>> r=br.open("http://www.helifreak.com")
>>> for f in br.forms():
...     if (f.action == 'http://www.helifreak.com/login.php'):
...             ff=f
... 
>>> m=md5.new()
>>> m.update('password123')
>>> d=m.hexdigest()
>>> ff.set_all_readonly(False)
>>> ff.set_value(d,'vb_login_md5password')
>>> ff.set_value(d,'vb_login_md5password_utf')
>>> ff.set_value('testsubject','vb_login_username')
>>> br.form=ff
>>> r=br.submit()
>>> print r.read()

最后打印的响应表明登录成功。

相关内容

最新更新