V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
paicha
V2EX  ›  问与答

关于模拟登录的问题

  •  
  •   paicha · 2013-08-11 02:46:22 +08:00 · 2628 次点击
    这是一个创建于 3934 天前的主题,其中的信息可能已经有所发展或是发生改变。
    新手刚刚学 Python,想做一个微信助手玩玩。
    前两天用构造 POST 数据的方法,写了个查询大学录取和新生报到登记的功能,发布到公众微信后有不少新生都在用,挺惊喜的。

    于是我又想做一个正方教务成绩查询的功能,但是之前的方法不管用了。

    Chrome 查看的数据如下:

    查看源码:ddlSF=%D1%A7%C9%FA

    ddlSF 应该是登录身份的选择


    但是我照样写到登录脚本里面去,却提示为选择角色错误:
    <script language='javascript'>alert('请选择角色!');</script>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 transitional//EN">
    <HTML>
    ……

    Python 脚本声明是utf-8 教务网站是 GB2312的


    所以感觉是编码不对造成登录失败,尝试了中文、字符串转换成gb2312再测试还是不行。

    请问大家有什么好的解决办法呢?回复必谢。
    13 条回复    1970-01-01 08:00:00 +08:00
    pandada8
        1
    pandada8  
       2013-08-11 10:45:33 +08:00   ❤️ 1
    >>> import urllib.parse
    >>> urllib.parse.unquote("%D1%A7%C9%FA")
    'ѧ��'
    >>> urllib.parse.unquote("%D1%A7%C9%FA",encoding="gb2312")
    '学生'
    >>> param = {"ddlSF":"学生"}
    >>> urllib.parse.urlencode(param,encoding="gb2312")
    'ddlSF=%D1%A7%C9%FA'
    >>> urllib.request.urlopen("url",data= urllib.parse.urlencode(param,encoding="gb2312").encode("gb2312"))#这里的编码随意……


    不知道你用的什么库,先试试吧
    paicha
        2
    paicha  
    OP
       2013-08-11 10:51:20 +08:00
    用的是:import re,urllib,urllib2,cookielib

    感谢,我试试看
    paicha
        3
    paicha  
    OP
       2013-08-11 10:51:40 +08:00
    @pandada8 忘了@ ……
    paicha
        4
    paicha  
    OP
       2013-08-11 10:54:57 +08:00
    @pandada8 咦 Python 2.7 好像没 urllib.parse _(:з」∠)_
    kk71
        5
    kk71  
       2013-08-11 10:57:55 +08:00   ❤️ 1
    @paicha 用python3吧 嘻嘻 py2的urlencode在urllib里
    paicha
        6
    paicha  
    OP
       2013-08-11 11:10:03 +08:00
    @kk71 可我还在学着这个教程:http://learnpythonthehardway.org/book/

    脚本里是用这处理post的数据的
    post_data={
    'xxx':'xxx',
    'aaa':'aaa',
    ……
    }
    post_data = urllib.urlencode(post_data)
    kk71
        7
    kk71  
       2013-08-11 11:12:44 +08:00
    @paicha 这本书是介绍py2的啊、http://learnpythonthehardway.org/book/ex0.html 你看
    pandada8
        8
    pandada8  
       2013-08-11 11:13:52 +08:00   ❤️ 1
    @paicha Python2 不熟,不过应该差不多……[被两个库坑出翔]
    应该要对 POST 的参数进行 URL 编码[gb2312]
    >>> urllib2.urlopen("",data = urllib.urlencode(params))
    应该差不多了……

    推荐一下 Requests https://github.com/kennethreitz/requests/ (虽然对于解决这个问题没有很大帮助)Api设计的比标准库好
    paicha
        9
    paicha  
    OP
       2013-08-11 11:17:23 +08:00
    @kk71 是啊,我正在学Python 2

    「A programmer may try to get you to install Python 3 and learn that. Say, "When all of the Python code on your computer is Python 3, then I'll try to learn it." That should keep them busy for about 10 years.」

    @pandada8
    好的,感谢你的提示,我继续琢磨琢磨
    pandada8
        10
    pandada8  
       2013-08-11 11:18:20 +08:00   ❤️ 1
    等等不对……
    python2的urlencode似乎不支持选择编码……
    快用Python 3吧少年,或者自己写个函数转……
    kk71
        11
    kk71  
       2013-08-11 11:23:05 +08:00   ❤️ 1
    @paicha py2很多地方有历史遗留问题和妥协。py3是经过梳理之后的语言,用过了就知道好在哪里了呢。期待pypy出py3.3的版本ing……
    paicha
        12
    paicha  
    OP
       2013-08-11 11:29:29 +08:00
    @pandada8

    那我要怎样转呢?

    我的理解是:

    # -*- coding:utf-8 -*-

    data = "学生"
    #定义函数
    #把data转换成gb2123编码
    #return data

    是这样么?

    @kk71

    后台用的是SAE,也只有2.73 刚刚学了了 python 2 两个星期,还是先入了门再接触 python 3
    LokiSharp
        13
    LokiSharp  
       2013-08-11 13:20:06 +08:00
    @paicha 还是直接学 Python 3 吧,等 Python 2 学完后,你就不一定会去转 Python 3 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2317 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:19 · PVG 20:19 · LAX 05:19 · JFK 08:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.