最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【问题解答】模拟登入百度,遇到验证码【Python】

Python crifan 3429浏览 0评论

【问题】

模拟登入百度,遇到验证码【Python】

模拟登入百度,遇到验证码,想手动输入,不知道怎么提取验证码   请教!

 

【解答】

1.我之前已经实现了,模拟登陆百度,且本身是(直接避开)没有遇到那个验证码的事情的。

详见:

详解抓取网站,模拟登陆,抓取动态网页的原理和实现(Python,C#等)

中的:

3.1. (多种语言实现)模拟登陆百度

先去用工具分析逻辑:

【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程

再去用代码实现,此处,目前已经实现了:

 

2.遇到验证码,目前,已知的办法有:

(1)自己破解验证码

很难。

除非自己技术,算法,思路,够好,估计可以轻松搞定。

否则,还是比较麻烦的。

当然,其实有,收费的服务,可以提供api,供你破解验证码的。

就看你需要了。

(2)人工识别然后输入

最省事。成本最低。

说白了就是:

已经分析出来验证码图片的逻辑后

写代码模拟,下载到验证码图片

(比如用python调用PIL在cmd中)显示出来

人用肉眼识别后,输入验证码字符串

程序继续处理

即可。

类似细节,如何实现,抽空再详细解释。

暂时可参考,我之前已有一个Python代码:

BlogsToWordPress

中的:

http://code.google.com/p/blogs-to-wordpress/source/browse/trunk/libs/crifan/blogModules/BlogNetease.py

中的相关代码:

        # 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】

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.209 seconds, using 22.07MB memory