python 模拟登录带有验证码的网站。如何保证验证码和当前爬取的登录页面同步?因为每打开一次页面 验证码就不同。还是上代码吧。大家帮忙看看。

2014-09-22 10:58:39 +08:00
 no13bus
登录页面是: http://110.249.223.91/hbhb/Default.aspx
自己代码执行的时候 最后的结果result.content不是登录之后的界面 而是还是登录之前的页面。result.history返回是空 而不是返回登录跳转成功的状态码302.

https://gist.github.com/no13bus/ce19d3a08aeae2096d32
13480 次点击
所在节点    Python
27 条回复
CDuXZMAPgHp1q9ew
2014-09-22 11:13:30 +08:00
试试这样? http://110.249.223.91/hbhb/(wyzkkr55fxit0o45yho2u5nv)/Default.aspx
我觉得应该保持session
不是很懂哦!
janxin
2014-09-22 11:21:23 +08:00
cap_str识别出来没有用吧?
no13bus
2014-09-22 11:28:01 +08:00
@wujichao 括号里面的是啥?
whywhywhy
2014-09-22 11:33:20 +08:00
正常情况下,只要带着正确的SessionId去请求验证码,以及提交,就不会有问题。(同一个SessionId请求多次验证码。以最后一次为准)
no13bus
2014-09-22 11:45:52 +08:00
@janxin



图片里面是我的抓包记录。图片里面可以看到登录页面打开之后,验证码的网址 http://110.249.223.91/hbhb/CheckCode.aspx 也随后请求了,代码里面我模拟了请求http://110.249.223.91/hbhb/default.aspx 是不是说我后面再次模拟请求验证码的地址的时候,其实是第二次点击了验证码地址?
1130335361
2014-09-22 11:52:27 +08:00
'txtCheckCode':cap_str
no13bus
2014-09-22 11:52:56 +08:00
@whywhywhy 嗯。那你的意思是说我的那个代码没啥问题?可是我执行的时候 最后的result结果并不是登录之后的页面。我再次使用mysession.get('http://110.249.223.91/hbhb/Main.aspx') 返回的是500错误。这说明我并没有登录进去。我使用chrome的一个插件postman测试的时候也是没有登录进去。
no13bus
2014-09-22 11:55:21 +08:00
@1130335361 修改了。但是还是登录不进去。
mhycy
2014-09-22 11:56:47 +08:00
检查是否存在JS添加/修改参数的情况
一般验证码是结合Cookie/Session做标记的吧?
mornlight
2014-09-22 11:56:50 +08:00
@no13bus 不会啊,你抓包时有这个请求是因为浏览器会自动加载验证码,程序里你只获取Default.aspx的话默认不会去加载其他东西的。
你先试试手动请求最新的验证码,然后把验证码填进去再 模拟登录看看,是不是其他部分有问题。
mhycy
2014-09-22 12:07:39 +08:00
ibtnlogin.y
ibtnlogin.x

这个参数每次请求都不一样
检查一下
CDuXZMAPgHp1q9ew
2014-09-22 12:25:12 +08:00
@no13bus session
no13bus
2014-09-22 12:27:16 +08:00
@mhycy 那个我看了 基本上就是你点击登录那个按钮的时候 鼠标在按钮的上面的相对坐标。
no13bus
2014-09-22 12:51:39 +08:00
@mornlight
抓包结果


利用postman进行模拟请求



模拟请求的时候确实得不到登录之后的页面。

no13bus
2014-09-22 13:01:49 +08:00
@janxin 刚更新了代码。用了。但是现在还是不能登录。搞不懂为什么
no13bus
2014-09-22 13:02:23 +08:00
@wujichao requests.Session就可以保持session的
janxin
2014-09-22 13:26:49 +08:00
@no13bus 'Cookie':'ASP.NET_SessionId=zybypfvmlkof0f55rrtprvb3',你cookies写死了
no13bus
2014-09-22 13:39:41 +08:00
@janxin 直接把他删除了。就好了。登录上去了。忘了requests.Session是自动保持cookie状态的,header不用另加cookie参数
pc10201
2014-09-22 13:57:13 +08:00
这种情况用浏览器模拟是最好的办法~
imn1
2014-09-22 14:24:36 +08:00
凡是需要session的进程,需要先get一次url获取cookies,其中至少需要得到session-id的相关项,然后后续的请求/post都应该附带这个cookies发送出去

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

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

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

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

© 2021 V2EX