我被建议使用Mechanize Module通过python脚本登录网站,虽然我原本想使用urllib / urllib2。现在,我已经阅读了Mechanize的文档,它只是不起作用。我已经在我的脚本中添加了cookie支持,而且似乎Mechanize不会完成这项工作。有人可以看看我的代码,并告诉我,如果我错过了什么?我的脚本创建的OUTPUT(MechanizeDat.html)应该在我登录后显示页面,其中应该包括我的用户名和帐户等,...虽然它目前只是重新显示登录屏幕。出于显而易见的原因,我从脚本中发出了我的密码/用户名,但你会得到这个想法(你应该得到'错误的用户名/密码组合',但你会看到你只是登录屏幕):
{
import mechanize
import cookielib
import urllib
import logging
import sys
def main():
br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
r= br.open('http://www.zulutrade.com/login')
# Select the second (index one) form
br.select_form(nr=0)
#for control in br.form.controls:
# print control
# User credentials
br.form['ctl00$main$tbUsername'] = 'MYUSERNAME'
br.form['ctl00$main$tbPassword'] = 'MYPASSWORD'
#br.form['3'] = 'Sign In'
# Login
br.submit()
# Open up comment page
posting = 'https://www.zulutrade.com/user#dashboard'
#rval = 'PoopSandwiches'
# you can get the rval in other ways, but this will work for testing
r = br.open(posting)
# You need the 'uh' value from the first form
#br.select_form(nr=0)
#uh = br.form['uh']
#br.select_form(nr=7)
#thing_id = br.form['thing_id']
#id = '#' + br.form.attrs['id']
# The id that gets posted is the form id with a '#' prepended.
#data = {'uh':uh, 'thing_id':thing_id, 'id':id, 'renderstyle':'html', 'r':rval, 'text':"Your text here!"}
#new_data_dict = dict((k, urllib.quote(v).replace('%20', '+')) for k, v in data.iteritems())
# not sure if the replace needs to happen, I did it anyway
#new_data = 'thing_id=%(thing_id)s&text=%(text)s&id=%(id)s&r=%(r)s&uh=%(uh)s&renderstyle=%(renderstyle)s' %(new_data_dict)
# not sure which of these headers are really needed, but it works with all
# of them, so why not just include them.
req = mechanize.Request('https://www.zulutrade.com/user#dashboard', None) #None was new_data
req.add_header('Referer', posting)
req.add_header('Accept', ' application/json, text/javascript, */*')
req.add_header('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8')
req.add_header('X-Requested-With', 'XMLHttpRequest')
cj.add_cookie_header(req)
res = mechanize.urlopen(req)
html=res.read()
file=open('MechanizeDat.html','wb')
file.write(html)
file.close()
main()
}