您好,匿名用户
随意问技术百科期待您的加入

怎么通过python获取验证码图片?

+1 投票

写使用python PAMIE模块写一个自动操作IE的脚本,但是获取验证码图片时遇到困难,试过使用win32inet.GetUrlCacheEntryInfo从IE缓存读文件,但读普通图片没问题,一读验证码图片就报错:

pywintypes.error: (2, 'GetUrlCacheEntryInfo', '\xcf\xb5\xcd\xb3\xd5\xd2\xb2\xbb\xb5\xbd\xd6\xb8\xb6\xa8\xb5\xc4\xce\xc4\xbc\xfe\xa1\xa3')

求获取验证码相关解决方案:

import cPAMIE
import urllib
import urllib2

def deCaptcha(function, image_source=None):
    """调用 de-captcher API 解析验证码图片

    Args:
        function: str
            balance: 查询余额,
            picture2: 解析图片
        image_source: str,图片源文件

    Returns:
        dict,de-captcher 解析返回信息

        {
            'ResultCode': 0,
            'MajorID': 107,
            'MinorID': 44685,
            'Type': 0,
            'Timeout': 0,
            'Text': 'n7hjks'
        }
    """

    data = {
        'username': 'username',
        'password': 'password',
        'function': function,
        'pict_to': '0',
        'pict_type': '0',
        'pict': image_source
    }
    keys = 'ResultCode|MajorID|MinorID|Type|Timeout|Text'.split('|')
    de_captcher_server = "http://poster.de-captcher.com/"

    if function is 'balance' and image_source is None:
        data.pop('pict')
        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
        result = opener.open(de_captcher_server, urllib.urlencode(data))
        return result
    elif function is 'picture2' and image_source:
        try:
            opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
            result = opener.open(de_captcher_server, urllib.urlencode(data))
            return dict(zip(keys, result.read().split('|')))
        except KeyError:
            return result


def getCaptchaImage(url):
    """获取验证码图片

    Args:
        url: 字符串,图片的网址

    Returns:
        字符串,图片源文件

        fileObj.read()
    """
    pass
    # 求获取验证码图片的方法


browser = cPAMIE.PAMIE()
browser.navigate('http://example.com/')
captcha_image_src = browser.imageGet('image_element_ID').src
image_source = getCaptchaImage(captcha_image_src)

print deCaptcha(image_source)['Text']
用户头像 提问 2012年 12月1日 @ Diana 上等兵 (326 威望)
分享到:

1个回答

+1 投票
 
最佳答案

因为验证码图片是禁止缓存的 ,当然无法用缓存函数获取了。 解决方法有很多。可以用同样的会话再次请求得到图片。关于此类图片保存在哪里,请阅读相关资料

用户头像 回复 2012年 12月1日 @ Talon 上等兵 (294 威望)
选中 2012年 12月1日 @Diana
提一个问题:

相关问题

0 投票
0 回复 1 阅读
用户头像 提问 2014年 6月7日 @ Pikachu 上等兵 (475 威望)
0 投票
1 回复 33 阅读
用户头像 提问 2013年 11月27日 @ Tristana 上等兵 (285 威望)
0 投票
0 回复 155 阅读
用户头像 提问 2012年 12月1日 @ Hera 上等兵 (249 威望)
0 投票
1 回复 33 阅读
用户头像 提问 2014年 1月30日 @ Lulu 上等兵 (293 威望)
0 投票
1 回复 50 阅读
用户头像 提问 2012年 12月1日 @ Pikachu 上等兵 (475 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...