关于模拟登录的问题

2013-08-11 02:46:22 +08:00
 paicha
新手刚刚学 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再测试还是不行。

请问大家有什么好的解决办法呢?回复必谢。
2634 次点击
所在节点    问与答
13 条回复
pandada8
2013-08-11 10:45:33 +08:00
>>> 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
2013-08-11 10:51:20 +08:00
用的是:import re,urllib,urllib2,cookielib

感谢,我试试看
paicha
2013-08-11 10:51:40 +08:00
@pandada8 忘了@ ……
paicha
2013-08-11 10:54:57 +08:00
@pandada8 咦 Python 2.7 好像没 urllib.parse _(:з」∠)_
kk71
2013-08-11 10:57:55 +08:00
@paicha 用python3吧 嘻嘻 py2的urlencode在urllib里
paicha
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
2013-08-11 11:12:44 +08:00
@paicha 这本书是介绍py2的啊、http://learnpythonthehardway.org/book/ex0.html 你看
pandada8
2013-08-11 11:13:52 +08:00
@paicha Python2 不熟,不过应该差不多……[被两个库坑出翔]
应该要对 POST 的参数进行 URL 编码[gb2312]
>>> urllib2.urlopen("",data = urllib.urlencode(params))
应该差不多了……

推荐一下 Requests https://github.com/kennethreitz/requests/ (虽然对于解决这个问题没有很大帮助)Api设计的比标准库好
paicha
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
2013-08-11 11:18:20 +08:00
等等不对……
python2的urlencode似乎不支持选择编码……
快用Python 3吧少年,或者自己写个函数转……
kk71
2013-08-11 11:23:05 +08:00
@paicha py2很多地方有历史遗留问题和妥协。py3是经过梳理之后的语言,用过了就知道好在哪里了呢。期待pypy出py3.3的版本ing……
paicha
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
2013-08-11 13:20:06 +08:00
@paicha 还是直接学 Python 3 吧,等 Python 2 学完后,你就不一定会去转 Python 3 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/78713

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX