Chinaunix
标题:
刚刚接触python的新手问几个问题
[打印本页]
作者:
feeLinglyn
时间:
2012-10-28 14:53
标题:
刚刚接触python的新手问几个问题
本帖最后由 feeLinglyn 于 2012-11-11 18:20 编辑
由于一个prp 让我这个之前没有学过python的需要完成以下内容(用的是python2.7)
批量注册某网站
问题1. 我们先以某个没验证码的网站
import re;
import cookielib;
import urllib;
import urllib2;
def checkAllCookiesExist(cookieNameList, cookieJar) :
cookiesDict = {};
for eachCookieName in cookieNameList :
cookiesDict[eachCookieName] = False;
allCookieFound = True;
for cookie in cookieJar :
if(cookie.name in cookiesDict) :
cookiesDict[cookie.name] = True;
for eachCookie in cookiesDict.keys() :
if(not cookiesDict[eachCookie]) :
allCookieFound = False;
break;
return allCookieFound;
def emulateLoginHuanxiao():
cj = cookielib.CookieJar();
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj));
urllib2.install_opener(opener);
print " emulate login huanxiao";
staticpage = "http://huanxiao.cc/mall/index.php";
baiduMainLoginUrl = "http://huanxiao.cc/mall/index.php?app=member&act=register&siteId=1";
postDict = {
'user_name':"prpdiyicitest3",
'password':"123456",
'password_confirm':"123456",
'email':"qqqqqq@qq.com",
'agree':"1",
'ret_url':staticpage
};
postData = urllib.urlencode(postDict);
print "postData=",postData;
req = urllib2.Request(baiduMainLoginUrl, postData);
req.add_header('Content-Type', "application/x-www-form-urlencoded");
cookiesToCheck = ['ECM_ID'];
loginHuanxiaoOK = checkAllCookiesExist(cookiesToCheck, cj);
if(loginHuanxiaoOK):
print "+++ Emulate login is OK, ^_^";
else:
print "--- Failed to emulate login !"
if __name__=="__main__":
emulateLoginHuanxiao();
有个小问题 就是加入我现在要注册那个网站,
其中有个变量通过IE的F12得到的分析网页是
ret_url=http%253A%252F%252Fhuanxiao.cc%252Fmall%252Findex.php
但是如果是按照一般的url encode 和decode他每个字符前面都多了个25
就是我认为理论上会得到这个 但是却得到上面那个带25的……
http%3A%2F%2Fhuanxiao.cc%2Fmall%2Findex.php
假设我先设staticpage = "http://huanxiao.cc/mall/index.php";
postData里有 'ret_url':staticpage,
如果直接后面用url里 postData=urllib.urlencode(postData);
得到的ret_url是http%3A%2F%2Fhuanxiao.cc%2Fmall%2Findex.php
十分感谢啊~
作者:
linux_c_py_php
时间:
2012-10-28 22:08
保存COOKIE就可以了.
作者:
feeLinglyn
时间:
2012-10-28 23:42
求具体解释下~就是1的那个是什么问题?
2的话我那个API的用户密码在哪里输 然后怎么调到主程序里?
回复
2#
linux_c_py_php
作者:
crifan
时间:
2012-11-08 12:54
回复
1#
feeLinglyn
仅提供参考:
【教程】模拟登陆网站 之 Python版(内含两种版本的完整的可运行的代码)
如果上述帖子中内容看懂了,你这个问题,你自己就可以搞定了。
作者:
feeLinglyn
时间:
2012-11-11 14:03
回复
4#
crifan
谢谢了 我在研究下~
作者:
feeLinglyn
时间:
2012-11-11 18:17
本帖最后由 feeLinglyn 于 2012-11-11 18:21 编辑
回复
4#
crifan
研究了一个下午 感觉受益匪浅~
不过有个小问题不知道你能解决么 就是加入我现在要注册那个网站,
其中有个变量通过IE的F12得到的分析网页是
ret_url=http%253A%252F%252Fhuanxiao.cc%252Fmall%252Findex.php
但是如果是按照一般的url encode 和decode他每个字符前面都多了个25
就是我认为理论上会得到这个 但是却得到上面那个带25的……
http%3A%2F%2Fhuanxiao.cc%2Fmall%2Findex.php
假设我先设staticpage = "http://huanxiao.cc/mall/index.php";
postData里有 'ret_url':staticpage,
如果直接后面用url里 postData=urllib.urlencode(postData);
得到的ret_url是http%3A%2F%2Fhuanxiao.cc%2Fmall%2Findex.php
请问有什么办法解决么
我把原帖子改了~里面的代码是现在的代码 感觉就差这一步……
作者:
crifan
时间:
2012-11-12 16:56
你是想要得到:
ret_url=http%253A%252F%252Fhuanxiao.cc%252Fmall%252Findex.php
复制代码
是吧。
那么经过两次urllib.quote_plus,即可得到你要的数据:
staticpage = "http://huanxiao.cc/mall/index.php";
print "Original staticpage\t\t\t\t=",staticpage;
staticpage = urllib.quote_plus(staticpage);
print "after first quote_plus,staticpage\t\t=",staticpage;
staticpage = urllib.quote_plus(staticpage);
print "after second quote_plus,staticpage\t\t=",staticpage;
youWantRetUrl = "http%253A%252F%252Fhuanxiao.cc%252Fmall%252Findex.php";
print "youWantRetUrl\t\t\t\t\t=",youWantRetUrl;
复制代码
输出是:
Original staticpage = http://huanxiao.cc/mall/index.php
after first quote_plus,staticpage = http%3A%2F%2Fhuanxiao.cc%2Fmall%2Findex.php
after second quote_plus,staticpage = http%253A%252F%252Fhuanxiao.cc%252Fmall%252Findex.php
youWantRetUrl = http%253A%252F%252Fhuanxiao.cc%252Fmall%252Findex.php
复制代码
作者:
feeLinglyn
时间:
2012-11-12 18:06
回复
7#
crifan
啊感激不尽 我去试试~
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2