精华内容
下载资源
问答
  • 怎么获取验证码呢?我也很懵逼解决思路:将整个注册页面保存下来,定位图片验证码图片的坐标,计算图片四个定点的位置,将图片验证截取;fromPILimportImage#获取验证码:先将验证码的图片保存下来;#将注册页面的...

    怎么获取验证码呢?我也很懵逼

    解决思路:将整个注册页面保存下来,定位图片验证码图片的坐标,计算图片四个定点的位置,将图片验证截取;from PIL import Image

    # 获取验证码:先将验证码的图片保存下来;

    # 将注册页面的保存为图片

    driver.save_screenshot("./image/register_screenshot.png")

    # 定位验证码图片的位置,并截取该位置的图片

    code_element = driver.find_element_by_id("getcode_num")

    print(code_element.location) # {'x': 548, 'y': 523}

    left = code_element.location['x']

    top = code_element.location['y']

    right = code_element.size['width'] + left

    height = code_element.size['height'] + top

    im = Image.open("./image/register_screenshot.png")

    img = im.crop((left, top, right, height))

    img.save("./image/code_num.png")

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

    写使用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']

    展开全文
  • 怎么获取验证码呢?我也很懵逼,验证码怎么处理呢? 1.最简单就是在代码中注释掉验证码呀,哈哈哈哈哈; 2.给你一个万能不变的验证码; … 当然这些方法不是不行,只是不符合用户操作场景,接下就来获取验证码的...

    怎么获取验证码呢?我也很懵逼,验证码怎么处理呢?
    1.最简单就是在代码中注释掉验证码呀,哈哈哈哈哈;
    2.给你一个万能不变的验证码;

    当然这些方法不是不行,只是不符合用户操作场景,接下就来获取验证码的问题吧…以问题驱动编码也是个不错的方式


    解决思路:将整个注册页面保存下来,定位图片验证码图片的坐标,计算图片四个定点的位置,将图片验证截取;然后利用第三方库或者专门的图片验证码识别接口进行图片验证码文字的识别
    GitHub代码commits id:3d95aa8

    一、保存验证码图片

    from PIL import Image
    
    # 获取验证码:①先将验证码的图片保存下来;②使用第三方库识别图片中的字母
    # 将注册页面的保存为图片
    driver.save_screenshot("./image/register_screenshot.png")
    # 定位验证码图片的位置,并截取该位置的图片
    code_element = driver.find_element_by_id("getcode_num")
    print(code_element.location) # {'x': 548, 'y': 523}
    left = code_element.location['x']
    top = code_element.location['y']
    right = code_element.size['width'] + left
    height = code_element.size['height'] + top
    im = Image.open("./image/register_screenshot.png")
    img = im.crop((left, top, right, height))
    img.save("./image/code_num.png")
    
    

    二、利用第三方接口识别图片文字

    #!/bin/usr/env python3
    # -*- coding: utf-8 -*-
    # --------------------------------
    # ProjectName: 
    # Author: Crisimple
    # FileName: read_image.py
    # Description: ShowapiRequest库从https://www.showapi.com/api/lookPoint/184下载
    # Question: 
    # --------------------------------
    
    import pytesseract
    from PIL import Image
    
    image = Image.open("./image/code_num.png")
    # 这块有好多的坑.......,pytesseract只能识别规则的验证码图片,对于该例子的验证码图片不适用
    # text = pytesseract.image_to_string(image)
    # print(text)
    
    # python3.6.5
    # 需要引入requests包 :运行终端->进入python/Scripts ->输入:pip install requests
    from ShowapiRequest import ShowapiRequest
    
    r = ShowapiRequest("http://route.showapi.com/184-4","48120","12c017278c0845c2bcda177212d2d2ac" )
    r.addBodyPara("img_base64", "")
    r.addBodyPara("typeId", "35")
    r.addBodyPara("convert_to_jpg", "0")
    r.addBodyPara("needMorePrecise", "0")
    r.addFilePara("image", r"./image/code_num.png") #文件上传时设置
    res = r.post()
    text = res.json()["showapi_res_body"]["Result"]
    print(text) # 返回信息
    
    

    三、代码整合

    将获取到的验证码输入的验证码输入框中

    # filename: start_broswer.py
    
    from ShowapiRequest import ShowapiRequest
    
    # 解析验证码图片中的文字(用第三方的图片验证码识别接口 ShowApiRequest)
    r = ShowapiRequest("http://route.showapi.com/184-4","my_appId","my_appSecret")
    r.addBodyPara("img_base64", "")
    r.addBodyPara("typeId", "35")
    r.addBodyPara("convert_to_jpg", "0")
    r.addBodyPara("needMorePrecise", "0")
    r.addFilePara("image", r"./image/code_num.png") #文件上传时设置
    res = r.post()
    text = res.json()["showapi_res_body"]["Result"]
    captcha_code.send_keys(text)
    time.sleep(3)
    
    
    展开全文
  • 注册app或者网络帐号的时候,经常需要手机获取验证码,来完成注册功能,那么android如何通过手机获取验证码来完成注册功能,代码是怎么实现的呢?下面看看小编给大家带了的一段代码分析吧
  • vue 实现获取验证码时间递减功能

    千次阅读 2018-07-09 22:00:36
    vue 实现获取验证码时间递减功能 关于获取验证码时间递减的情况,最常用的是出现在注册界面,当我们点击获取验证码之后,然后时间通常为60s递减,那么vue是怎么实现的呢?首先看一下效果图。获取验证码接口就自己去...
    vue 实现获取验证码时间递减功能

        关于获取验证码时间递减的情况,最常用的是出现在注册界面,当我们点击获取验证码之后,然后时间通常为60s递减,那么vue是怎么实现的呢?首先看一下效果图。获取验证码接口就自己去琢磨了哈


    vue如下:
    <template>
    <transition name="bounce"
      enter-active-class="bounceInLeft"
      leave-active-class="bounceOutRight">
      <div class="bg" v-loading="loading" :style="{backgroundImage:`url(${backImgUrl})`}">
        <div class="login">
          <div class="left">
            <div class="loginTitle">
              <h3>用户注册</h3>
            </div>
            <el-form :model="loginForm" :rules="rules" ref="loginForm" style="margin-top: 40px;">
              <el-form-item prop="phone">
                <el-input v-model="loginForm.phone" placeholder="请输入手机号"></el-input>
              </el-form-item>
              <el-form-item prop="password">
                <el-input v-model="loginForm.password" placeholder="请输入密码" type="password" :maxlength="16" :minlength="6"></el-input>
              </el-form-item>
              <el-form-item prop="password">
                <el-input v-model="loginForm.repassword" placeholder="再次请输入密码" type="password" :maxlength="16" :minlength="6"></el-input>
              </el-form-item>
              <!-- <el-form-item class="modifyVerification">
                <div class="verificationCode">
                  <el-input v-model="loginForm.password" placeholder="请输入验证码"></el-input>
                  <div class="verficationImage"></div>
                </div>
              </el-form-item> -->
               <el-form-item class="phoneVerification">
                <div class="phoneVerificationCode">
                  <el-input v-model="loginForm.validateCode" placeholder="请输入收到的验证码"></el-input>
                  <div class="phoneVerficationImage" @click="getValidate()">{{validateName}}</div>
                </div>
              </el-form-item>
              <div class="agreeText">
                  <div>
                    <el-checkbox v-model="checked">同意<span>注册协议</span>
                    </el-checkbox>
                  </div>
                  <div>
                    <a @click="goToLogin()"><span>已有账号登录</span></a>
                  </div>
              </div>
              <el-form-item>
                <el-button type="primary" style="width: 100%; margin: 30px 0" @click="submitForm()">立即注册</el-button>
              </el-form-item>
            </el-form>
          </div>
          <div class="right">
            <img :src="imgCode"/>
            <p>扫一扫<br>下载嗨黔东南</p>
          </div>
        </div>
      </div>
    </transition>
    </template>
    
    <script>
    import imgCode from 'assets/images/code.jpg'
    import backImgUrl from 'assets/images/landr/login-bg.jpg'
    
    let countDown = 60
    export default {
      data () {
        return {
          validateName: '获取验证码',
          checked: false,
          backImgUrl,
          imgCode,
          loading: false,
          loginForm: {
            phone: '',
            password: '',
            repassword: '',
            validateCode: ''
          },
          rules: {
            phone: [
              { required: true, message: '请输入手机号', trigger: 'blur' },
              { pattern: /^1[34578]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' }
            ],
            password: [
              { required: true, message: '请输入密码', trigger: 'blur' },
              { pattern: /^[0-9a-zA-Z]{6,16}$/, message: '密码6~16位由字母、数字、下划线组成', trigger: 'blur' }
            ],
            repassword: [
              { required: true, message: '请输入密码', trigger: 'blur' },
              { pattern: /^[0-9a-zA-Z]{6,16}$/, message: '密码6~16位由字母、数字、下划线组成', trigger: 'blur' }
            ]
          }
        }
      },
      created() {
        document.title = '登录-嗨黔东南'
      },
      methods: {
        submitForm () {
          const _self = this
          if (this.loginForm.password !== this.loginForm.repassword) {
            _self.$message({
              showClose: true,
              message: '两次输入的密码不一致',
              type: 'error'
            })
            return
          } else if (this.loginForm.validateCode === '' || this.loginForm.validateCode === null) {
            _self.$message({
              showClose: true,
              message: '未验证手机验证码',
              type: 'error'
            })
            return
          }
          this.$refs.loginForm.validate((valid) => {
            if (valid) {
              _self.loading = true
              _self.$http.post(`/v1/sms/${_self.loginForm.phone}/${_self.loginForm.validateCode}`, null).then(data => {
                _self.loading = false
                _self.$http.post('/v1/phoneRegister', {phone: _self.loginForm.phone, password: _self.loginForm.password}).then(data => {
                  this.$store.commit('setUserInfo', data)
                  _self.loading = false
                  _self.$message({
                    showClose: true,
                    message: '注册成功',
                    type: 'sucess'
                  })
                  _self.$router.push('/login')
                }).catch(errMsg => {
                  _self.loading = false
                  _self.$message({
                    showClose: true,
                    message: errMsg,
                    type: 'error'
                  })
                })
              }).catch(errMsg => {
                _self.loading = false
                _self.$message({
                  showClose: true,
                  message: errMsg,
                  type: 'error'
                })
              })
            }
          })
        },
        goToLogin () {
          this.$router.push('/login')
        },
        // 手机验证码定时器
        setTimeDown () {
          if (countDown === 0) {
            this.validateDisabled = false
            this.validateName = '重新获取'
            countDown = 60
            return
          } else {
            this.validateDisabled = true
            this.validateName = countDown + 's'
            countDown--
          }
          const _self = this
          this.timer = setTimeout(() => {
            _self.setTimeDown()
          }, 1000)
        },
        getValidate () {
          if (this.validateDisabled) {
            return
          }
          if (this.loginForm.phone === null || this.loginForm.phone === '') {
            const _self = this
            _self.$message({
              showClose: true,
              message: '手机号不能为空',
              type: 'error'
            })
            return
          }
          if (countDown >= 60) {
            const _self = this
            this.$http.get(`/v1/sms/` + this.loginForm.phone, null).then(data => {
              _self.$message({
                showClose: true,
                message: '发送验证码成功',
                type: 'sucess'
              })
            }).catch(errMsg => {
              _self.$message({
                showClose: true,
                message: errMsg,
                type: 'error'
              })
            })
          }
          this.setTimeDown()
        }
      }
    }
    </script>
    
    <style lang="stylus" scoped>
    @import '~@/assets/css/variable.styl'
    .bg
      position fixed
      top 0
      left 0
      right 0
      bottom 0
      width 100%
      height 100%
      background-repeat: no-repeat;
      background-size: cover;
      background-position 50% 50%;
      z-index 500
    .login
      padding 18px
      background #ffffff
      border-radius 5px
      position absolute
      top 50%
      left 50%
      transform translate(-50%, -50%)
      display flex
      .forget
        text-align right
        margin-top -21px
        cursor pointer
        color $color-theme
        &:hover
          text-decoration underline
    .left
      width 300px
      padding 12px
      padding-right 24px
      .loginTitle
        left 0px
        top 0px
        position fixed
        width 100%
        line-height 50px
        height 50px
        background-color #58D0FF
        text-align center
        color white
        font-size 18px
    .right
      padding 70px 10px 0 20px
      border-left 1px solid $color-border
      text-align center
      img
        width 180px
        height 180px
      p
        font-size 15px
        color #797979
        line-height 24px
        margin-top 30px
        text-align center
        width 180px
        line-height 1.8
        letter-spacing 4px
    .divider
      display flex
      justify-content space-between
      align-items center
      white-space nowrap
      height auto
      overflow hidden
      line-height 1
      text-align center
      padding 10px 0
      color #666
      margin-top 24px
      &:before
      &:after
        content ''
        display block
        position relative
        width 100px
        height 1px
        background $color-border
    .third-login
      display flex
      justify-content space-around
      text-align center
      margin-top 15px
      i
        font-size 48px
        color $color-theme
      p
        color #666
    
    .modifyVerification {
      .verificationCode {
        display flex
        .verficationImage {
          background-color #79c757
          width 55%
          height 40px
          margin-left 10px
        }
      }
    }
    .phoneVerification {
      .phoneVerificationCode {
        display flex
        .phoneVerficationImage {
          cursor pointer
          background-color #ffad4d
          width 55%
          height 40px
          margin-left 10px
          color white
          text-align center
        }
      }
    }
    .agreeText {
      display flex
      justify-content space-between
    }
    
    a {
      text-decoration none
      color black
    }
    </style>
    

    定时主要关注getValidate()和setTimeDown()方法即可,欢迎留言,项目要上线来不及时间解释。

    使用的是elementUi 组件,需要引入,注重上面两个方法即可

    展开全文
  • 我用curl获取验证码时同时想获取cookies信息但是乱码。 curl获取时头信息时“Content-Type: text/html;”这个导致了乱码。 请问怎么解决,让验证码显示同时也能输出cookies?
  • ![图片说明](https://img-ask.csdn.net/upload/201711/24/1511502524_580456.jpg) 有大神帮忙分析下 到底是怎么回事么
  • 现在大部分的注册都是采用手机号码注册的,都要获取验证码进行验证才能注册,为了减少用户的操作,有些应用就会做自动填充验证码的功能。 需求有了,现在就看怎么实现了,有2种方法能监听到收到的短信,一种是通过...
  • ![图片说明](https://img-ask.csdn.net/upload/202008/28/1598589230_539689.png) ![图片说明](https://img-ask.csdn.net/upload/202008/28/1598589250_19877.png) 怎么能让后端返回的验证码在前端正常显示呢
  • 通过手机号获取验证码-验证码实现方式举例C#

    万次阅读 热门讨论 2018-10-29 15:57:42
    那么这种方式是怎么实现的呢?首先我们介绍一下手机为什么会收到短信呢?这里大部分都会使用第三方的服务,比如:云之讯,联通,阿里,这些供应商会以接口的形式提供给我们我们,我们只需要注册他们的服务就可以使用...
  • 我之前使用ORC技术,可以获取识别验证码,但是现在人家验证码升级了,识别不出来了,求大神教我怎么样去识别,如果才能干掉验证码?
  • 通过php curl从checkcode.aspx 获取验证码, 仅去除头部信息 获取的数据用ie打开能看到验证码,但是用chrome打开就是一串GIF....开头的乱码 这个是怎么回事 而且如果首页获得的图片的话 ie是能够另存为gif图片的 ...
  • 我想通过HttpClient获取http://202.97.135.173/Sehup/invseek/web.jsp这个网站下的验证码图片,可是获取到的图片显示'盗版网站',不知道是怎么回事。
  • 这是一个bug,点击邮箱登录之后点击忘记密码会出现获取验证码,获取到验证码之后输入验证码显示不对是无效的,log也没有报错,求大神帮看看是什么问题,,能否给点意见或者帮助解决一下,十分感谢![图片说明]...
  • //怎么在这里获取验证码的值 if (ModelState.IsValid) { if (userManager.selUser(user)) { ModelState.AddModelError("doubleUser", "当前用户已经被注册"); } else { if (userManager.Register...
  • <span id="yzm">T8XM</span> function yzm(){ var arr = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',...
  • 本来想用HttpURLConnection.openConnection这个方法,获取那个验证码的, 但是在百度注册的时候,那个验证码,每次刷新网页,那串验证码图片的网址都不一样的。。 所以说HttpURLConnection.openConnection这个方法...
  • 在我们的生活中,经常会遇到(www.yunxintong100.com)需要手机注册,手机验证,手机修改密码的时候,而这些操作都会收到手机验证码来...一、获取短信验证码的基本流程 1.注册网站帐号时,首先输入自己的手机号码,点击
  • 一种是纯数字,就是验证码是通过发送短信的这种,这种比较好获取,另一种是图形验证码,有些图形验证码比较简单,比如纯数字的,有些比较复杂,比如字母数字结合还有一些阻碍的线条这种,这时候该怎么获取呢。...
  • js 注册界面 获取手机验证码

    万次阅读 2018-01-30 19:33:07
    首先,给大家介绍下注册界面以及获取手机验证码的一些原理和规则逻辑,方便大家在今后更好的使用此功能,分别注意以下几点:(代码写的怎么样看看就知道,不含糊); 1,界面div这个必不可少的;(输入账户、输入...
  • 运用UFT(QTP)、LoadRunner时遇到验证码怎么写程序识别它
  • 大家可能都遇到过网站带验证码的,用httpclient去获取会给我们造成许多困扰和麻烦,网站的写法多变,有直接赋值的、有用ajax赋值的各种各样,下面就为大家解释一下怎么获取验证码的网站。 首先、你要知道他的...
  • 最近在使用angular来做项目,功能要求实现一是点击按钮获取验证码,二是点击登录验证表单。之前用jquery来做项目很好做,使用angular怎么实现呢?其实实现代码也很简单的,下面通过实例代码给大家介绍下,需要的朋友...
  • <p>CRMEB pro版获取短信验证码失败? 怎么解决!</p>
  • phpcms v9后台登陆验证码无法显示论坛里关于这个问题貌似一直没有解决,查看源代码后发现,关键一点是获取验证码的图片与全局变量SITE_URL相关,也就是网站的目录, 所以只要修改cache/configs/system.php文件中的...
  • [img=https://img-bbs.csdn.net/upload/202006/23/1592899365_618695.png][/img][img=...后台判断了这个手机号码达到限额,不给继续获取。我的前端如何判断这个手机号达到当日限额
  • 一、ASP.Net的验证码的作用  对于一个预防攻击的web表单来讲,验证码通常是一个常见的措施。因为如果对于一些public区域的页面内容来讲,譬如一个登录表单,如果没有必要的安全措施,很可能遭到模拟登录的暴力破解...
  • 虽然我们之前讲过购票软件加验证码是为了防止过多爬虫的获取。那么在一些简单的软件中,有没有什么可以“偷懒”的小技巧在登陆的时候可以用爬虫绕过呢?今天我们就以不同的验证码形式为例,讲讲不同种类的验证码之间...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 393
精华内容 157
关键字:

怎么获取验证码