我知道这里有很多示例,这些示例解释了如何使用Python登录网站,但是过去3天我一直在尝试,但是我什么都没做。这可能是由于Python对我而言是全新的事实,所以请原谅我的无知。
最吸引我的方法是使用request,因为这似乎是最短的方法。
我在此网站上建立了一个测试帐户,因此如果您愿意,您可以测试自己的东西:
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定义了输入的“名称”,而我已经看到几个人使用该输入的“ id”。虽然,我的页面似乎没有用于输入密码或用户名的'id',并且我在这里也可以使用'name'进行阅读。
结论:我很困惑。任何帮助将不胜感激。
谢谢你。
在查看了您提供的HTML的源之后,我意识到应该发布到的URL是:
http://www.helifreak.com/login.php
您需要做的第二件事是弄清楚md5hash函数在做什么,然后在POST之前在Python程序中做同样的事情。
我刚刚找到了md5hash函数的位置。它在这里定义:http : //www.helifreak.com/clientscript/vbulletin_md5.js。他们所做的是使用MD5算法对表单字段进行哈希处理,然后将哈希值分配给该字段的值。如果要成功登录,则需要在Python中执行相同的操作。
这是一个解决方案。它比我想象的要简单,但是您需要使用机械化(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()
最后打印的响应指示登录成功。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句