鱼C论坛

 找回密码
 立即注册
查看: 6971|回复: 12

[已解决]关于爬虫验证码的问题

[复制链接]
发表于 2016-4-20 17:25:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在写一个登录我们学校网站的爬虫,现在遇到了一个问题
我们学校的验证码是一个链接,在审查里面是这个样子的 上图:
屏幕快照 2016-04-20 下午5.16.52.png

然后问题来了,如果把这个页面打印下来,就是这样
屏幕快照 2016-04-20 下午5.18.24.png   是文本,验证码并没有。。

我就想解决问题,于是我发现了验证码的链接是这样
屏幕快照 2016-04-20 下午5.19.37.png    我简直太机智了   然后我就写爬虫把验证码给扒下来然后人工输入了
然而登录总是提醒我验证码错误     我终究发现我还是too young...
每当我打开一次这个验证码的网站,相应登录的POST需要发送的验证码就随着变了啊!!!
所以现在是怎么破?
我怎么能够直接打开这个网站得到这个验证码,而且在不打开一次验证码链接的情况下。。。
求大神助我一臂之力
十分感谢!
最佳答案
2016-4-20 20:54:19
这个涉及到session相关知识, 我简单说一说思路吧

首先get这个登录页面, 并且需要使用支持session的模块(requests这类), 然后再去请求验证码, 获得之后手动输入再post, 你试试
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-4-20 19:55:22 | 显示全部楼层
虽然我不会Python  但是我用易语言试了一下   没问题啊  可以很正常的登录       虽然我没有账号测试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-20 20:54:19 | 显示全部楼层    本楼为最佳答案   
这个涉及到session相关知识, 我简单说一说思路吧

首先get这个登录页面, 并且需要使用支持session的模块(requests这类), 然后再去请求验证码, 获得之后手动输入再post, 你试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-20 21:58:33 | 显示全部楼层
hldh214 发表于 2016-4-20 20:54
这个涉及到session相关知识, 我简单说一说思路吧

首先get这个登录页面, 并且需要使用支持session的模块( ...

又是你版主
虽然不造你在说什么。。。
我就先去自己查查什么意思好了,不做伸手党~自己动手,丰衣足食
谢谢版主
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-20 23:38:34 | 显示全部楼层
Liu_xy 发表于 2016-4-20 21:58
又是你版主
虽然不造你在说什么。。。
我就先去自己查查什么意思好了,不做伸手党~自己动手 ...

嗯, 主要看看验证法的原理, 为什么点击刷新验证码之后, 服务器就知道刷新之后的验证码是多少
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-21 15:15:49 | 显示全部楼层
hldh214 发表于 2016-4-20 23:38
嗯, 主要看看验证法的原理, 为什么点击刷新验证码之后, 服务器就知道刷新之后的验证码是多少

版主,我已经气决人亡了,根本搞不定。。。
  1. import urllib.request
  2. import urllib
  3. import http.cookiejar
  4. import urllib.parse


  5. CaptchaUrl = 'http://222.30.32.10/ValidateCode'
  6. PostUrl = 'http://222.30.32.10/stdloginAction.do'
  7. headers = {
  8. 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  9. 'Accept-Encoding':'gzip, deflate',
  10. 'Accept-Language':'zh-CN,zh;q=0.8,en;q=0.6',
  11. 'Cache-Control':'max-age=0',
  12. 'Connection':'keep-alive',
  13. 'Content-Type':'application/x-www-form-urlencoded',
  14. 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36'

  15. }
  16. headers2 = [('Host','222.30.32.10'),('Accept','image/webp,image/*,*/*;q=0.8'),('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36'),('Referer','http://222.30.32.10/'),('Aceept-Encoding','gzip, deflate, sdch'),('Accept-Language','zh-CN,zh;q=0.8,en;q=0.6'),('Connection','keep-alive')]

  17. cookie = http.cookiejar.CookieJar()
  18. handler = urllib.request.HTTPCookieProcessor(cookie)
  19. opener = urllib.request.build_opener(handler)
  20. opener.addheaders = headers2
  21. username = '1310053'
  22. passward = '857b16e889f59c23c184112e76cb90cd983a225bdc78de9b8828c8e72e82c8d19134147c9b0a98da33d64aa14f4c07c62c4f1b9059d5813501215bbc52b40f89e52ff1fc8f644cd6dfbe37d97dba1df801c0d8a4145f319a4a770b933a89fce932f95efa91b986a40fb683c0877c800aebf1943fb19972693433da27c14ce38f'

  23. picture = opener.open(CaptchaUrl).read()

  24. with open('image.jpg','wb') as f:
  25.     f.write(picture)

  26. SecretCode = input('请输入验证码:')

  27. postData = {'operation':'','usercode_text':'1310053','userpwd_text':'857b16e889f59c23c184112e76cb90cd983a225bdc78de9b8828c8e72e82c8d19134147c9b0a98da33d64aa14f4c07c62c4f1b9059d5813501215bbc52b40f89e52ff1fc8f644cd6dfbe37d97dba1df801c0d8a4145f319a4a770b933a89fce932f95efa91b986a40fb683c0877c800aebf1943fb19972693433da27c14ce38f','checkcode_text':SecretCode,'submittype':'%C8%B7+%C8%CF'}


  28. data = urllib.parse.urlencode(postData).encode()
  29. request = urllib.request.Request(PostUrl, data, headers)
  30. response1 = opener.open(request)
  31. result = response1.read()
  32. print(result)
复制代码


这是我写的代码,为什么,它,不,返回,任何东西。。。
能帮忙看看吗??
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-21 17:02:52 | 显示全部楼层
Liu_xy 发表于 2016-4-21 15:15
版主,我已经气决人亡了,根本搞不定。。。

首先恭喜你, 验证码这块你已经攻克了, 因为如果验证码错误, 将会有文字提示, 而这个返回空, 则涉及到另一个知识了, RSA算法, 这个不必去理解原理, 只需要一些JavaScript基础, 能看懂网页源代码里面的js具体起的一个什么作用, 就ok了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-21 17:44:47 | 显示全部楼层
hldh214 发表于 2016-4-21 17:02
首先恭喜你, 验证码这块你已经攻克了, 因为如果验证码错误, 将会有文字提示, 而这个返回空, 则涉及到另一 ...

omg好循循善诱,我喜欢
就让我再与js大战三百回合吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-21 17:47:28 | 显示全部楼层
hldh214 发表于 2016-4-21 17:02
首先恭喜你, 验证码这块你已经攻克了, 因为如果验证码错误, 将会有文字提示, 而这个返回空, 则涉及到另一 ...

对了版主大大。。。能不能再说具体点
我现在很迷茫。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-21 17:50:07 | 显示全部楼层
Liu_xy 发表于 2016-4-21 17:47
对了版主大大。。。能不能再说具体点
我现在很迷茫。。。

你查看一下html代码, 看到有一段js以及外部包含的js, 这俩就是用来加密每次post数据的算法, 仔细看看, 明白加密逻辑就行了, 然后用Python模拟, 亦或者直接用js引擎(PhantomJS这类)都行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-21 18:08:29 | 显示全部楼层
hldh214 发表于 2016-4-21 17:50
你查看一下html代码, 看到有一段js以及外部包含的js, 这俩就是用来加密每次post数据的算法, 仔细看看, 明 ...

等等,我现在有几个疑问
第一。我的response里面是空的,所以就是没有html代码呀。。。你的意思是让我看在网页上正确登录的那个源代码吗?
第二。这个加密是指在POST的过程中会对我的用户名和密码加密吗??
我POST的密码就是加密过后的,只不过我发现每次加密都是一样的,所以就用抓包的方式把这个加密后的密码当作密码POST过去的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-21 18:12:49 | 显示全部楼层
Liu_xy 发表于 2016-4-21 18:08
等等,我现在有几个疑问
第一。我的response里面是空的,所以就是没有html代码呀。。。你的意思是让我看 ...

按理来说每次登录post的数据是不一样的才对.......我也不清楚
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-21 18:15:51 | 显示全部楼层
hldh214 发表于 2016-4-21 18:12
按理来说每次登录post的数据是不一样的才对.......我也不清楚


为什么第一次写python就遇到我们学校这么变态的系统啊
好受伤。。。搞了几天都登不进去
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-20 18:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表