Python模拟登陆 —— 征服验证码 10 知乎(倒立文字验证码)

知乎的倒立文字验证码

# 登录知乎,通过保存验证图片方式
import urllib.request
import urllib.parse
import time
import http.cookiejar

webUrl = "https://www.zhihu.com/login/email"#不能写https://www.zhihu.com/#signin因为不支持重定向

webheader = {
    # 'Accept': 'text/html, application/xhtml+xml, */*',
    # 'Accept-Language': 'zh-CN',
    # 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko',
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36',
    # 'User-Agent': 'Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5',
    # 'DNT': '1',
    # 'Connection': 'Keep-Alive'
    }
    
postData = {
    'email': '在这里写你的账号',
    'captcha_type': 'cn',
    'password': '在这里写你的密码',
    '_xsrf': '',
    'captcha': ''
}
localStorePath = "写你想保存的验证码图片的地址"

if __name__ == '__main__':
    #声明一个CookieJar对象实例来保存cookie
    cookie = http.cookiejar.CookieJar()
    #创建opener
    handler = urllib.request.HTTPCookieProcessor(cookie)
    opener = urllib.request.build_opener(handler)#建立opener对象,并添加头信息
    urllib.request.install_opener(opener) 
    
    captcha_url = 'https://www.zhihu.com/captcha.gif?r=%d&type=login&lang=cn' % (time.time() * 1000)
    # captcha_url = 'http://www.zhihu.com/captcha.gif?r=%d&type=login' % (time.time() * 1000)#这样获得的是“字母+数字验证码”

    #这个获取验证码图片的方法是不行的!
    # urllib.request.urlretrieve(captcha_url, localStorePath + 'myCaptcha.gif')
    
    #用urlopen函数保存验证图片
    req = urllib.request.Request(url=captcha_url,headers=webheader)
    content = urllib.request.urlopen(req)
    # content = opener.open(req)
    captcha_name = 'D:/Python学习/crawler_learning/知乎登录专题研究/知乎验证码图片/myNewCaptcha.gif'
    content = content.read()
    with open(captcha_name, 'wb') as f:
        f.write(content)
    
    postData['captcha'] = input('请输入验证码')
    # postData['_xsrf'] = get_xsrf()
    postData['_xsrf'] = 'fa5ae712244bd4287e371801052003fc'
    print(postData['_xsrf'])
    
    #用urlopen函数传送数据给服务器实现登录
    postData_encoded = urllib.parse.urlencode(postData).encode('utf-8')
    req = urllib.request.Request(url=webUrl,data=postData_encoded,headers=webheader)
    webPage = urllib.request.urlopen(req)
    # webPage = opener.open(req)
    data = webPage.read().decode('utf-8')
    
    print(data)
    with open("D:/知乎服务器反馈的内容.txt",mode='w',encoding='utf-8') as dataFile:
        dataFile.write(data)

参考: http://blog.csdn.net/hudeyu777/article/details/76706007 http://www.jianshu.com/p/50c5815bb60b#

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏移动端周边技术扩展

iOS打开系统功能对应的URL

18830
来自专栏刘望舒

Android6.0到9.0的适配爬坑总结

  大家还记得Android 6.0权限适配的泪水吗?而现在谷歌已经出了Android P的稳定版,而且谷歌粑粑,为了大家能给辛苦熬夜加班,特地的和个大市场合作...

56730
来自专栏帘卷西风的专栏

关于cocos2dx客户端程序的自动更新解决方案

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog)

23610
来自专栏技术碎碎念

数据的分页处理

当页面中要显示的内容过多需要分多页显示、或是数据量过大内存吃不消时,需要分页处理。 原理:每次从数据库中取出一定量的数据,通过jsp页面显示 实现: ①写一个类...

29950
来自专栏Python爬虫与算法进阶

Python最假的库:Faker

前辈在review的时候说怎么这么复杂,Python中有一个专门生成各类假数据的库:Faker,你去了解下。

26740
来自专栏iOSer成长记录

iOS-关于Cell上Button点击效果

21330
来自专栏SeanCheney的专栏

Scrapy随机切换用户代理User-Agent

使用fake-useragent: https://github.com/hellysmile/fake-useragent 这是一个可以随机切换访问头的插...

431120
来自专栏iOS技术

iOS 触摸事件响应链

本文讨论iOS事件中的触摸事件及其响应链,至于加速计事件和远程控制事件不在本文的讨论范畴。

44270
来自专栏施炯的IoT开发专栏

Windows Mobile 6.5.3 Developer Tool Kit

    目前,微软正在花大量的人力物力财力做Windows Phone 7,而且据说以后会给出硬件平台配置需求,目前的Windows Mobile 6.x系列机...

20750
来自专栏雪胖纸的玩蛇日常

django 分页功能

21250

扫码关注云+社区

领取腾讯云代金券