python urllib2模拟登录返回cookies问题

极雪寒冬 发布于 2016/03/15 16:52
阅读 1K+
收藏 0

程序逻辑:get访问登录页面,获取登录页面验证码地址和相关参数,整合数据,手动输入验证码,post请求登录重定向页面

测试结果:开始是验证码总是错误,后来是只要输入正确的验证码就报错,

urllib2.HTTPError: HTTP Error 404: Not Found

但是输入错误的验证码会返回“验证码错误”的登录界面html

下面是header和data:

header:

data:

最后是代码:

#coding:utf-8
import urllib2
import cookielib
import urllib
import re
import requests
from StringIO import StringIO
import gzip
from PIL import Image
from lxml import etree




#第一步,我要得到登录界面的html
#需要url,header
def getCaptcha():
url='https://login.weibo.cn/login/'
headers={
    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Language':'zh-CN,zh;q=0.8',
        'Connection':'keep-alive',
        'Host':'login.weibo.cn',
        'Upgrade-Insecure-Requests':'1',
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36'
}
request=urllib2.Request(url,headers=headers)
response=urllib2.urlopen(request)
return response.read()




def getPictureurl(html):
selector=etree.HTML(html)
password=selector.xpath('//input[@type="password"]/@name ')[0]
vk=selector.xpath('//input[@name="vk"]/@value ')[0]
  action=selector.xpath('//form[@method="post"]/@action')[0]
code_url=selector.xpath('//img/@src')[0]
capld=code_url[code_url.find('cpt=')+4:]
path="/Users/jochuang/testcccc/pythonfetch/1.jpg"
code_picture=urllib.urlretrieve(code_url,path)
code=openPicture(path)
post(vk,action,capld,code,password)





def openPicture(path):
im=Image.open(path)
im.show()
code_number=raw_input('请输入验证码\n')
return code_number




def post(vk,action,capld,code,password):
email='ekmu84myk02@sohu.com'
password_input='aaa333'
data={
"mobile": email,
password: password_input,
    "code": code,
    "remember": "on",
    "backURL": "http%3A%2F%2Fweibo.cn",
    "backTitle": "手机新浪网",
    "tryCount": "",
    "vk": vk,
    "capId": capld,
    "submit": "登录"
    }
new_url='https://login.weibo.cn/login/'+action
print new_url
headers={
    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Language':'zh-CN,zh;q=0.8',
        'Connection':'keep-alive',
        'Host':'login.weibo.cn',
        'Upgrade-Insecure-Requests':'1',
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36'
}
data1=urllib.urlencode(data)
print data1
request=urllib2.Request(new_url,headers=headers,data=data1)
response=urllib2.urlopen(request)
print response.read()


    
if __name__=='__main__':
html=getCaptcha()
getPictureurl(html)

请教各位解惑,多谢

加载中
0
fromdtor
fromdtor

urllib2使用CookieJar,httplib2可以使用文件管理。

httplib2可以参考http://www.oschina.net/code/snippet_273719_54445这里的实现方式


0
极雪寒冬
极雪寒冬

引用来自“pitttttttt”的评论

urllib2使用CookieJar,httplib2可以使用文件管理。

httplib2可以参考http://www.oschina.net/code/snippet_273719_54445这里的实现方式


多谢,我的问题已经解决了,你给的网页可以很好的解决二维码的问题~
0
fromdtor
fromdtor

引用来自“pitttttttt”的评论

urllib2使用CookieJar,httplib2可以使用文件管理。

httplib2可以参考http://www.oschina.net/code/snippet_273719_54445这里的实现方式


引用来自“极雪寒冬”的评论

多谢,我的问题已经解决了,你给的网页可以很好的解决二维码的问题~
~~~
返回顶部
顶部