【问题】
模拟登入百度,遇到验证码,想手动输入,不知道怎么提取验证码 请教! |
【解答】
1.我之前已经实现了,模拟登陆百度,且本身是(直接避开)没有遇到那个验证码的事情的。
详见:
详解抓取网站,模拟登陆,抓取动态网页的原理和实现(Python,C#等)
中的:
3.1. (多种语言实现)模拟登陆百度先去用工具分析逻辑: 【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程 再去用代码实现,此处,目前已经实现了: |
2.遇到验证码,目前,已知的办法有:
(1)自己破解验证码
很难。
除非自己技术,算法,思路,够好,估计可以轻松搞定。
否则,还是比较麻烦的。
当然,其实有,收费的服务,可以提供api,供你破解验证码的。
就看你需要了。
(2)人工识别然后输入
最省事。成本最低。
说白了就是:
已经分析出来验证码图片的逻辑后
写代码模拟,下载到验证码图片
(比如用python调用PIL在cmd中)显示出来
人用肉眼识别后,输入验证码字符串
程序继续处理
即可。
类似细节,如何实现,抽空再详细解释。
暂时可参考,我之前已有一个Python代码:
中的:
中的相关代码:
# following is emulation of goto retryNum = 5; for tries in range(retryNum) : logging.debug("begin do %d times verify code", tries); # do what you want normally do here verifyCode = ""; # process verify code == captcha # url is: #http://api.blog.163.com/cap/captcha.jpgx?parentId=172799491&r=581079 #captchaUrl = "http://api.blog.163.com/cap/captcha.jpgx"; #captchaUrl += "?parentId=" + parentId; # add 6 digit random value captchaUrl += str(crifanLib.randDigitsStr(6)); logging.debug("captchaUrl=%s", captchaUrl); respHtml = crifanLib.getUrlRespHtml(captchaUrl); # captchaDir = "captcha"; # #captchaPicFile = "returned_captcha.jpg"; # captchaPicFile = datetime.now().strftime('%Y%m%d_%H%M%S') + "_captcha.jpg"; # saveToFile = captchaDir + "/" + captchaPicFile; # crifanLib.saveBinDataToFile(respHtml, saveToFile); # print "save verify code pic OK, saveToFile=",saveToFile; # openedImg = Image.open(saveToFile); # print "openedImg=",openedImg; # openedImg.show(); # print "openedImg OK"; #jpgData = respHtml; #newImg = Image.new("RGB", (60,24)); #img = newImg.fromstring(jpgData); #img.show(); if(gVal['importedPil'] == False): logging.debug("now will import PIL module"); from PIL import Image; logging.debug("import PIL module OK"); gVal['importedPil'] = True; img = Image.open(StringIO.StringIO(respHtml)); # 如果看不到图片,请参考: #【已解决】Python中通过Image的open之后,去show结果打不开bmp图片,无法正常显示图片 #https://www.crifan.com/python_image_show_can_not_open_bmp_image_file/ img.show(); hintStr = unicode("请输入所看到的(4个字母的)验证码:", "utf-8"); verifyCode = raw_input(hintStr.encode("GB18030")); #logging.info(u"您所输入的验证码为:%s", verifyCode); # captchaCode = crifanLib.parseCaptchaFromPicFile(saveToFile); # print "captchaCode=",captchaCode;
然后自己照葫芦画瓢,即可去写自己的了。
另外,如果本身不知道,如何获得验证码图片
那么说明你:
对于所要模拟登陆的过程的内部逻辑都还没搞清楚
所以需要你,先去搞清楚
如何搞清楚:
用工具分析内部登陆过程
详见:
详解抓取网站,模拟登陆,抓取动态网页的原理和实现(Python,C#等)
中的:
【教程】模拟登陆网站 之 Python版(内含两种版本的完整的可运行的代码)
中的
【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程
转载请注明:在路上 » 【问题解答】模拟登入百度,遇到验证码【Python】