Skip to content

Commit

Permalink
修复了有的账号输入验证码时crash的bug
Browse files Browse the repository at this point in the history
  • Loading branch information
atupal committed Jun 15, 2013
1 parent a7f155a commit bffa489
Show file tree
Hide file tree
Showing 4 changed files with 189 additions and 23 deletions.
53 changes: 48 additions & 5 deletions dianzan/dianzan_py-dom-xpath.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,14 +91,28 @@ def _login(self):
import os
if os.environ.get('HOME') == '/home/atupal':
data['verify'] = raw_input("verify:")
url = self._verify(data = data, headers = headers, url = url)
'''#代码重复了,发送验证码的实现逻辑由_verrify方法实现
res = self.session.post(url, data = data, headers = headers, allow_redirects = False)
#print '1' + str(res.content)
url = res.headers['location']
##验证码后第一次get
#url = self._parse(url, '/wml/card/@ontimer')[0].content
##验证码后第二次get
#url = self._parse(url, '/wml/card/@ontimer')[0].content
#验证码后第一次get
url = self._parse(url, '/wml/card/@ontimer')[0].content
content = self.session.get(url).content
#print '2' + content
url = self._parse(None, '/wml/card/@ontimer', content = content)[0].content
#验证码后第二次get
url = self._parse(url, '/wml/card/@ontimer')[0].content
content = self.session.get(url).content
#print '3' + content
url = self._parse(None, '/wml/card/@ontimer', content = content)[0].content
'''
else:
form = '<form action="/dianzan_verify" method="post">'
for i in data:
Expand Down Expand Up @@ -126,6 +140,31 @@ def _login(self):
#print self.session.get(url).content

#至此已经登陆成功了
def _verify(self, data, headers, url = None):
if not url:
url = data.pop('url')
res = self.session.post(url, data = data, headers = headers, allow_redirects = False)
print '1' + str(res.content)
url = res.headers['location']

#验证码后第一次get
content = self.session.get(url).content
print '2' + content
url = self._parse(None, '/wml/card/@ontimer', content = content)[0].content

#验证码后第二次get
content = self.session.get(url).content
print '3' + content

#有的账号会再跳转一次,有的不会,算个bug吧
try:
url_tmp = self._parse(None, '/wml/card/@ontimer', content = content)[0].content
except:
url_tmp = None
if url_tmp:
url = url_tmp
return url


def dianzan(self, cnt = 5, op = '1'):
'''
Expand Down Expand Up @@ -163,24 +202,28 @@ def __init__(self):

def verify(self, data, headers):
print data
self.url = self._verify(data = data, headers = headers)
self.verify = None

'''代码重复了,写到了父类的_verify方法里面去了统一处理需要验证码时的情况
url = data.pop('url')
res = self.session.post(url, data = data, headers = headers, allow_redirects = False)
print '1' + str(res.content)
#print '1' + str(res.content)
url = res.headers['location']
#验证码后第一次get
content = self.session.get(url).content
print '2' + content
#print '2' + content
url = self._parse(None, '/wml/card/@ontimer', content = content)[0].content
#验证码后第二次get
content = self.session.get(url).content
print '3' + content
#print '3' + content
url = self._parse(None, '/wml/card/@ontimer', content = content)[0].content
self.verify = None
self.url = url
'''


if __name__ == "__main__":
Expand Down
47 changes: 45 additions & 2 deletions dianzan/server-sae/application/apps/dianzan.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,14 +91,28 @@ def _login(self):
import os
if os.environ.get('HOME') == '/home/atupal':
data['verify'] = raw_input("verify:")
url = self._verify(data = data, headers = headers, url = url)
'''#代码重复了,发送验证码的实现逻辑由_verrify方法实现
res = self.session.post(url, data = data, headers = headers, allow_redirects = False)
#print '1' + str(res.content)
url = res.headers['location']
##验证码后第一次get
#url = self._parse(url, '/wml/card/@ontimer')[0].content
##验证码后第二次get
#url = self._parse(url, '/wml/card/@ontimer')[0].content
#验证码后第一次get
url = self._parse(url, '/wml/card/@ontimer')[0].content
content = self.session.get(url).content
#print '2' + content
url = self._parse(None, '/wml/card/@ontimer', content = content)[0].content
#验证码后第二次get
url = self._parse(url, '/wml/card/@ontimer')[0].content
content = self.session.get(url).content
#print '3' + content
url = self._parse(None, '/wml/card/@ontimer', content = content)[0].content
'''
else:
form = '<form action="/dianzan_verify" method="post">'
for i in data:
Expand Down Expand Up @@ -126,6 +140,31 @@ def _login(self):
#print self.session.get(url).content

#至此已经登陆成功了
def _verify(self, data, headers, url = None):
if not url:
url = data.pop('url')
res = self.session.post(url, data = data, headers = headers, allow_redirects = False)
print '1' + str(res.content)
url = res.headers['location']

#验证码后第一次get
content = self.session.get(url).content
print '2' + content
url = self._parse(None, '/wml/card/@ontimer', content = content)[0].content

#验证码后第二次get
content = self.session.get(url).content
print '3' + content

#有的账号会再跳转一次,有的不会,算个bug吧
try:
url_tmp = self._parse(None, '/wml/card/@ontimer', content = content)[0].content
except:
url_tmp = None
if url_tmp:
url = url_tmp
return url


def dianzan(self, cnt = 5, op = '1'):
'''
Expand Down Expand Up @@ -163,7 +202,10 @@ def __init__(self):

def verify(self, data, headers):
print data
self.url = self._verify(data = data, headers = headers)
self.verify = None

'''代码重复了,写到了父类的_verify方法里面去了统一处理需要验证码时的情况
url = data.pop('url')
res = self.session.post(url, data = data, headers = headers, allow_redirects = False)
#print '1' + str(res.content)
Expand All @@ -181,6 +223,7 @@ def verify(self, data, headers):
self.verify = None
self.url = url
'''


if __name__ == "__main__":
Expand Down
14 changes: 9 additions & 5 deletions dianzan/server-sae/application/views/index.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,15 @@
def index():
return '''
<html>
<form action="/dianzan" method="post">
<input type="text" value="qq" name="qq"/>
<input type="password" name="pwd" />
<input type="submit" value="confirem">
</form>
<body>
<form id="login" action="/dianzan" method="post">
<input name="qq" type="text" placeholder="qq">
<br/>
<input name="pwd" type="password" placeholder="Password">
<br/>
<input type="submit" value="confirm" class="bt">
</form>
</body>
</html>
'''

Expand Down
98 changes: 87 additions & 11 deletions dianzan/server-sae/dianzan.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ def _login(self):
'hiddenPwd' ,
'login_url' ,
'go_url' ,
'verify' ,
#'verify' ,
'sidtype' ,
]
for name in names:
Expand All @@ -87,25 +87,49 @@ def _login(self):
r = self.session.get(img_url)
verify_img = Image.open(StringIO(r.content))
verify_img.show()
url = self._parse(None, '//*/@href', content = res.content)[1].content #post地址
import os
if os.environ['HOME'] == '/home/atupal':
if os.environ.get('HOME') == '/home/atupal':
data['verify'] = raw_input("verify:")
url = self._parse(None, '//*/@href', content = res.content)[1].content #post地址
url = self._verify(data = data, headers = headers, url = url)
'''#代码重复了,发送验证码的实现逻辑由_verrify方法实现
res = self.session.post(url, data = data, headers = headers, allow_redirects = False)
#print '1' + str(res.content)
url = res.headers['location']
##验证码后第一次get
#url = self._parse(url, '/wml/card/@ontimer')[0].content
##验证码后第二次get
#url = self._parse(url, '/wml/card/@ontimer')[0].content
#验证码后第一次get
url = self._parse(url, '/wml/card/@ontimer')[0].content
content = self.session.get(url).content
#print '2' + content
url = self._parse(None, '/wml/card/@ontimer', content = content)[0].content
#验证码后第二次get
url = self._parse(url, '/wml/card/@ontimer')[0].content
content = self.session.get(url).content
#print '3' + content
url = self._parse(None, '/wml/card/@ontimer', content = content)[0].content
'''
else:
import json
self.verfity = json.dumps({
'data': data,
'headers': headers,
'img': img_url
})
form = '<form action="/dianzan_verify" method="post">'
for i in data:
form += '<input type="hidden" name="%s" value="%s"></input>'%(i, data[i])

form += '<input type="hidden" name="url" value="%s"></input>'%url #带上url,下次浏览器post接收
form += '<input type="text" name="verify"></input>'
form += '<input type="submit" value="confirm"></input>'
form += '</form>'
self.verify = '''
<html>
<img src="%s"/>
%s
</html>
'''%(img_url, form)

return

else:
url = self._parse(url, '/wml/card/@ontimer')[0].content #再get一次就登陆成功了 ,以上和chrome浏览器都略有不用,没有302
Expand All @@ -116,6 +140,31 @@ def _login(self):
#print self.session.get(url).content

#至此已经登陆成功了
def _verify(self, data, headers, url = None):
if not url:
url = data.pop('url')
res = self.session.post(url, data = data, headers = headers, allow_redirects = False)
print '1' + str(res.content)
url = res.headers['location']

#验证码后第一次get
content = self.session.get(url).content
print '2' + content
url = self._parse(None, '/wml/card/@ontimer', content = content)[0].content

#验证码后第二次get
content = self.session.get(url).content
print '3' + content

#有的账号会再跳转一次,有的不会,算个bug吧
try:
url_tmp = self._parse(None, '/wml/card/@ontimer', content = content)[0].content
except:
url_tmp = None
if url_tmp:
url = url_tmp
return url


def dianzan(self, cnt = 5, op = '1'):
'''
Expand Down Expand Up @@ -147,7 +196,34 @@ def dianzan(self, cnt = 5, op = '1'):
feed_url = url.content
return 'success'

class Dianzan_verify(Dianzan):
def __init__(self):
self.session = requests.Session()

def verify(self, data, headers):
print data
self.url = self._verify(data = data, headers = headers)
self.verify = None

'''代码重复了,写到了父类的_verify方法里面去了统一处理需要验证码时的情况
url = data.pop('url')
res = self.session.post(url, data = data, headers = headers, allow_redirects = False)
#print '1' + str(res.content)
url = res.headers['location']
#验证码后第一次get
content = self.session.get(url).content
#print '2' + content
url = self._parse(None, '/wml/card/@ontimer', content = content)[0].content
#验证码后第二次get
content = self.session.get(url).content
#print '3' + content
url = self._parse(None, '/wml/card/@ontimer', content = content)[0].content
self.verify = None
self.url = url
'''


if __name__ == "__main__":
Expand Down

0 comments on commit bffa489

Please sign in to comment.