模拟登陆

环境: python scrapy

乐8账号充值

return [Request("http://gh.le890.com/checkcode.php", 
meta = {'cookiejar' : response.meta['cookiejar']}, 
callback = self.save_ver_code)
]
···
def save_ver_code(self, response): 
ver_code = 'code' + str(self._id)
path = '/www/gh/crawler/ver_code/' + ver_code
with open(path, 'wb') as f:
f.write(response.body)
···
print u'输入验证码:'
code = raw_input()
···

return [Request("http://tcoin.52tt.com/tcoin/login.shtml", 
meta = {'cookiejar' : 1}, 
callback = self.post_login)
]
···
def post_login(self, response):
# asprint 'Preparing login'
self._csrf = response.xpath('//input[@name="_csrf"]/@value').extract()[0]
# 提交表单
return [FormRequest("http://tcoin.52tt.com/tcoin/login",
meta = {'cookiejar' : response.meta['cookiejar']},
headers = self.headers,
formdata = {
'username': 'username',
'password': 'password',
'submit': '',
'_csrf': self._csrf
},
callback = self.read_account_message,
dont_filter = True
)] 
  • 保存session:(乐8平台需要将session保存到本地文件)
# 将cookie写入文件,并保存到self.co变量
# 在登陆完成之后做此操作
self.cookie_jar = response.meta['cookiejar']
self.cookie_jar.extract_cookies(response, response.request)

try:
with open("cookie.txt", 'wb+') as f:
for cookie in self.cookie_jar:
f.write(str(cookie) + '\n')

self.co = str(cookie).split(' ')[1]
self.co = {self.co.split('=')[0]: self.co.split('=')[1]}
except Exception, e:
print e

···

# 如果写入过cookie,则读取出来
if os.path.isfile('cookie.txt'):
with open("cookie.txt") as f:
cookiejar = f.read()
self.co = cookiejar.split(' ')[1]
self.co = {self.co.split('=')[0]: self.co.split('=')[1]}
  • 另一种表单提交方案:
return scrapy.FormRequest.from_response(
response,
meta = {'cookiejar' : response.meta['cookiejar']},
formnumber = 1,
formdata = self.post_data,
dont_click = True,
callback = self.parse_page,
)
posted @ 2016-05-26 17:49  Sam083  阅读(267)  评论(0编辑  收藏  举报