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
Graxce
V2EX  ›  Python

Python 模拟登录挂号网为何总是出错?

  •  
  •   Graxce · 2016-02-17 15:00:07 +08:00 · 2500 次点击
    这是一个创建于 3203 天前的主题,其中的信息可能已经有所发展或是发生改变。

    弄了一整天了,还是没什么头绪。
    模拟登录成功的话会返回 302 ,可是每次都是不行。
    这是代码:
    https://gist.github.com/CraxGrix/5bb33e116934f1ebf259

    V2ex 不能发图片,那我发我的知乎问题吧。那里写的更清楚。
    www.zhihu.com/question/40393212

    这里提供一个帐号供各位测试
    帐号: 13136180314
    密码: 123456

    9 条回复    2016-02-23 14:16:24 +08:00
    aec4d
        1
    aec4d  
       2016-02-17 17:32:43 +08:00   ❤️ 1
    用好 CTRL+V 神技
    # loginId , validCode
    import requests

    def login():
    s = requests.session()
    s.get('http://www.guahao.com/user/login')
    captcha_content = s.get('http://www.guahao.com/validcode/genimage/1').content
    with open('dic.jpeg', 'wb') as fp:
    fp.write(captcha_content)
    data = {
    "method": "dologin",
    "target": "/",
    "loginId": "13136180314",
    "password": "e10adc3949ba59abbe56e057f20f883e",
    "validCode": input('CODE: ')
    }
    r = s.post('http://www.guahao.com/user/login', data=data, allow_redirects=False)
    print(r.status_code)


    if __name__ == '__main__':
    login()
    Graxce
        2
    Graxce  
    OP
       2016-02-17 20:06:42 +08:00
    @aec4d 实在是非常感谢,每次我都不记得检查自己的代码。每次出错都是因为我自己疏忽所以才导致的。真是太蠢了我!以后我不会提这种这么蠢的问题了!!谢谢!
    slideclick
        3
    slideclick  
       2016-02-19 14:44:34 +08:00
    @aec4d 从你代码看,你是把 password 加密了的。从那个挂号网页面 code 怎么看出来的加密算法?
    sololivan
        4
    sololivan  
       2016-02-19 16:05:44 +08:00
    @slideclick 不用知道加密算法, 直接看加密好的发送请求呀.
    Graxce
        5
    Graxce  
    OP
       2016-02-21 15:00:13 +08:00
    @slideclick 常见的加密算法就那么几个,拿到 password 数据后只需要找在线加解密工具。一个一个试就好啦。
    slideclick
        6
    slideclick  
       2016-02-22 09:48:47 +08:00
    @sololivan 确实可以解决这个问题,我感兴趣的是,从该网站的前端页面代码应该可以看到加密算法,但是我前端不够熟悉,不知道怎么看出来的
    slideclick
        7
    slideclick  
       2016-02-22 09:53:04 +08:00
    @Graxce http://onlinemd5.com/ 把你的口令填进去就行了。但是你总要试三次。我的问题是,拿到一个前端页面的 code 这个你总可以拿到因为在浏览器里面,你怎么知道它的加密算法?浏览器肯定知道,它发的是 MD5 之后的,它怎么知道的?
    slideclick
        8
    slideclick  
       2016-02-22 17:30:38 +08:00
    打开 http://www.guahao.com/user/login 页面看源码,看不到加密 password 的 js 代码。而显然它的 post 的目标 /user/login 要的是 MD5 加密,我的问题是,如果你抽象地拿到这个问题,有什么办法知道它用的什么加密算法。
    xqin
        9
    xqin  
       2016-02-23 14:16:24 +08:00
    1. 得到登陆时提交的数据字段名.(比如你的这个是 password)
    2. 然后在浏览器(Chrome)中打开控制台, 按 Ctrl+Shift+F, 在里面输入 password
    3. 在查找到的结果中, 以你的为例,会看到一个 new-account.js, 在这个文件里会找到下面这样的代码:
    ```
    i.find("#J_LoginSubmit").click(function() {
    return r.find(".g-tips-box-error").hide(),
    r.find(".g-tips-box-succ").hide(),
    $GUB.isActive($(this)) && e.checkValidity(r) && ($GUB.disable($(this), "处理中..."),
    r.find("input[name='password']").val($().crypt({
    method: "md5",
    source: r.find("#password").val()
    })),
    r.submit()),
    !1
    }
    ),

    ```

    然后你就知道它用的什么加密的了.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4273 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 04:12 · PVG 12:12 · LAX 20:12 · JFK 23:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.