V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zhengmacro
V2EX  ›  Python

问个很蠢的爬虫验证码问题

  •  
  •   zhengmacro · 2016-09-27 09:58:12 +08:00 · 3304 次点击
    这是一个创建于 3007 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在做一个自动登录的脚本,碰到验证码通过 chrome 的调试模式能直接看到验证码,如下图 http://ww4.sinaimg.cn/mw690/005RvRnzgw1f87wsnzqjcj30by01hjrk.jpg 如果我要用 python requests 有没有办法搞到这个验证码

    12 条回复    2016-10-08 15:51:05 +08:00
    Hyeongo
        1
    Hyeongo  
       2016-09-27 10:04:34 +08:00 via iPhone
    直接取那个值不就好了
    vivagonna
        2
    vivagonna  
       2016-09-27 10:06:53 +08:00 via Android
    @Hyeongo 楼主的意思可能是验证码是 js 生成的,跟抢月饼那个类似, lol
    zhengmacro
        3
    zhengmacro  
    OP
       2016-09-27 10:15:15 +08:00
    @vivagonna 对的, js 生成的
    crab
        4
    crab  
       2016-09-27 10:15:36 +08:00
    xhr 请求看看
    zhengmacro
        5
    zhengmacro  
    OP
       2016-09-27 10:20:24 +08:00
    js 是直接写在登录页面的,类似下面这个

    var code; //在全局 定义验证码
    function createCode() {
    code = "";
    var codeLength = 6;//验证码的长度
    var checkCode = document.getElementById("checkCode");
    var selectChar = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9,'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');//所有候选组成验证码的字符,当然也可以用中文的

    for (var i = 0; i < codeLength; i++) {
    var charIndex = Math.floor(Math.random() * 36);
    code += selectChar[charIndex];
    }
    //alert(code);
    if (checkCode) {
    checkCode.className = "code";
    checkCode.value = code;
    }
    }

    function validate() {
    var inputCode = document.getElementById("input1").value;
    if (inputCode.length <= 0) {
    alert("请输入验证码!");
    } else if (inputCode != code) {
    alert("验证码输入错误!");
    createCode();//刷新验证码
    } else {
    alert("^-^ OK");
    }
    }
    cheetah
        6
    cheetah  
       2016-09-27 10:37:05 +08:00 via iPhone
    这个验证码的生成和验证完全是前端 js 来做的,你用 requests 请求的时候本来就不会执行 js ,所以,管他作甚?
    zongren
        7
    zongren  
       2016-09-27 10:43:51 +08:00
    楼上说的很清楚了
    crab
        8
    crab  
       2016-09-27 10:50:37 +08:00
    如果是前端生成,你不提交或者提交符合长度的字符串就行了。服务端也验证不到。
    zhengmacro
        9
    zhengmacro  
    OP
       2016-09-27 11:05:08 +08:00
    @cheetah
    @zongren
    @crab
    感觉天亮了,谢谢哈哈
    killerv
        10
    killerv  
       2016-09-27 13:23:34 +08:00
    突然感觉好多验证码设计真是奇葩
    PureDark
        11
    PureDark  
       2016-09-28 00:50:09 +08:00
    这个验证码的设计毫无意义啊

    你是用代码提交的,那就完全不需要管他这个验证码,直接绕过 JS 验证提交请求不就行了……

    服务端又不验证
    linruiyi
        12
    linruiyi  
       2016-10-08 15:51:05 +08:00
    前端生成,哈哈哈,这个设计真的是~~~ 看题目第一眼以为是要问后端生成的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2562 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:33 · PVG 19:33 · LAX 03:33 · JFK 06:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.