python怎样避免验证码

walk121 2012-08-11 09:17:50
写个程序登录51job读数据,发现总是让输入图片里的验证码,而我用浏览器时则没有这个提示,怎样能像浏览器时那样,绕过输入验证码这个步骤呢?

代码:

loginUrl = 'http://my.51job.com/my/My_SignIn.php'
loginform = urllib2.urlopen(loginUrl).read()
bs = BeautifulSoup(loginform)
url = bs.find('div', 'login_box').find('form')['action']


myCookie = urllib2.HTTPCookieProcessor(cookielib.CookieJar());
opener = urllib2.build_opener(myCookie)

post_data = {
'username':'user',
'userpwd':'pwd',
'url':'',
'x':'45',
'y':'17'
}


req = urllib2.Request(url, urllib.urlencode(post_data))
req.add_header('User-Agent','Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6')
#req.add_header('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')
#req.add_header('Accept-Encoding','gzip,deflate')
html_src = opener.open(req).read()
...全文
329 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gloveing 2012-08-13
  • 打赏
  • 举报
回复
你先探索吧,不行的话,晚上给你一份参考代码
Gloveing 2012-08-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

to agoago_2009:
何以见得啊?我把电脑上所有浏览器的cookie和表单等都清除了,post的东西还是那些内容啊?

下面是提交表单按钮的代码,谁懂这个?
JScript code

<form action="http://my.51job.com/81765294303620322103/my/My_Pmc.php" method="post" name="signin……
[/Quote]
很明显是:post提交表单
你看表单下面的内容,post的时候,需要提交哪些信息
walk121 2012-08-13
  • 打赏
  • 举报
回复
python里怎么执行js?用ie也行
walk121 2012-08-13
  • 打赏
  • 举报
回复
谢谢agoago,大热天的说什么好,无以为报,60分相送
Gloveing 2012-08-13
  • 打赏
  • 举报
回复
看了看,原来这网站和其他网站不咋一样;
开始的时候是先进行了预登陆:
1.GET /my/My_ChkLoginInfo.php?0.7380493697710335&jsoncallback=jsonp1344844653670&_=1344844745801&username=abcd111&password=2222222222
这里的:
0.7380493697710335-----------应该是随机数,到时候你也随机产生小于1的一个随机数,长度和他一样
jsoncallback=jsonp1344844653670 ------其中的1344844653670 是时间戳,到时候你替换一下
1344844745801 ------------------------应该也是时间戳,比上一个稍大点

2.再次验证:
POST /58816496951100870357/my/My_Pmc.php HTTP/1.1
58816496951100870357-------------这个值是变化的,你可以从第一次返回的页面中的类似:<form action="http://my.51job.com/81765294303620322103/my/My_Pmc.php"那里提取出来

post的data确实是你以前的:
post_data = {
'username':'user',
'userpwd':'pwd',
'url':'',
'x':'45',#只是可能稍有变化,可能是与鼠标的位置什么的有关,,关系不大,y也是
'y':'17'#
}
Gloveing 2012-08-13
  • 打赏
  • 举报
回复
看了看,原来这网站和其他网站不咋一样;
开始的时候是先进行了预登陆:
1.GET /my/My_ChkLoginInfo.php?0.7380493697710335&jsoncallback=jsonp1344844653670&_=1344844745801&username=abcd111&password=2222222222
这里的:
0.7380493697710335-----------应该是随机数,到时候你也随机产生小于1的一个随机数,长度和他一样
jsoncallback=jsonp1344844653670 ------其中的1344844653670 是时间戳,到时候你替换一下
1344844745801 ------------------------应该也是时间戳,比上一个稍大点

2.再次验证:
POST /58816496951100870357/my/My_Pmc.php HTTP/1.1
58816496951100870357-------------这个值是变化的,你可以从第一次返回的页面中的类似:<form action="http://my.51job.com/81765294303620322103/my/My_Pmc.php"那里提取出来

post的data确实是你以前的:
post_data = {
'username':'user',
'userpwd':'pwd',
'url':'',
'x':'45',#只是可能稍有变化,可能是与鼠标的位置什么的有关,,关系不大,y也是
'y':'17'#
}
walk121 2012-08-13
  • 打赏
  • 举报
回复
agoago_2009好人……
JS完全不懂,python也是初学,回头再看看书,苦恼中
walk121 2012-08-12
  • 打赏
  • 举报
回复
需要运行在linux平台下,所以调用ie相关的办法不行
qq120848369 2012-08-12
  • 打赏
  • 举报
回复
当然是去看JS代码了,onsubmit不是调了个函数么。
walk121 2012-08-12
  • 打赏
  • 举报
回复
to agoago_2009:
何以见得啊?我把电脑上所有浏览器的cookie和表单等都清除了,post的东西还是那些内容啊?

下面是提交表单按钮的代码,谁懂这个?

<form action="http://my.51job.com/81765294303620322103/my/My_Pmc.php" method="post" name="signin" id="signin" onsubmit="javascript:return chkSignIn('CN', 'http://my.51job.com');" style="display:inline">

Gloveing 2012-08-12
  • 打赏
  • 举报
回复
在登录之前,先把你以前的所有Cookie和记住的表单密码全清除了,
看你的这请求就知道,你用的是你以前的cookie去登陆了
所以要查看到具体post什么东西去验证,你得先清除cookie和浏览器记住的表单密码
walk121 2012-08-12
  • 打赏
  • 举报
回复
用fiddler抓了一下,发现点击登陆后,有一个连接请求
到:


http://my.51job.com/my/My_ChkLoginInfo.php?

GET /my/My_ChkLoginInfo.php?0.10497224769852076&jsoncallback=jsonp1317455255957&_=1317455289245&username=usern&password=fsdasdd

下面这几个post的值是什么意思,从哪能获取到?
0.10497224769852076&jsoncallback=jsonp1317455255957&_=1317455289245
Gloveing 2012-08-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
需要运行在linux平台下,所以调用ie相关的办法不行
[/Quote]
那没办法了。你就使用fiddle去抓取HTTP请求看看
你post的data部分可能有问题哦。。
libralibra 2012-08-11
  • 打赏
  • 举报
回复
如果纯为拿数据,用 cPAMIE库,模拟浏览器的,用参数将浏览器隐藏即可
有快捷方式点击按钮,链接,提交表单等
Gloveing 2012-08-11
  • 打赏
  • 举报
回复
还有你post的data部分可能有问题哦。。
建议你使用fiddle去抓取HTTP请求看看
zengna_com 2012-08-11
  • 打赏
  • 举报
回复
可以试试pamie?
qq120848369 2012-08-11
  • 打赏
  • 举报
回复
有不弹验证码的情况?

网站给你弹验证码一般基于两个依据:

1,session统计失败次数与登录频率
2,ip统计失败次数与登录频率

方法1:对于坏人形同虚设,只要每次登陆前先不提交COOKIE的访问一次表单页面拿到新的SESS-COOKIE,然后提交表单即可。

方法2:对坏人一样形同虚设,只要坏人去百度搜索里爬足够多的免费HTTP代理IP即可,每次换代理去登陆。


----------------
这里具体问题具体分析, My_SignIn.php返回的COOKIE你没有保存,这是很致命的,人家返回的GUID的COOKIE给你,你提交表单的时候如果没有这个COOKIE估计就被拒了。

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧