想用python写一个yunfile的下载器.. 或者叫爬虫?
思路挺简单的.. 下载链接分析转页目前到了验证码的一部分..
已经把验证码下载下来了..
chrome f12里面就什么都没有了..
就是输入完验证码之后点击进入下载.. 然后什么都没有!!!30秒过了还是什么都没有!!
完全不知道下一步该怎么办了...
代码如下
1 wudaown OP |
2 em70 2015-06-27 21:56:08 +08:00 via Android 说明验证码错误了吧,人家系统知道你在破解,不给你返回任何错误信息 |
3 wudaown OP @em70 不科学.. 我用浏览器正常操作没有然后在develop tools里面有看到任何返回.. 你没明白我的意思么......... |
![]() | 4 crab 2015-06-27 22:41:12 +08:00 时间到这个js redirectDownPage() 控制跳转的 |
![]() | 6 crab 2015-06-27 23:39:21 +08:00 @wudaown 我不懂 Python 。 刚才试了下流程,就是先请求下文件下载页面,获取 fileid,再请求 验证码。 输入验证码后,延迟30秒,再请求文件调整页面链接。这个链接要自己构造 比如你代码提供的就是这个: http://p1.yunfile.com/file/down/wushangzhikong/3a40b126/0105.html 3a40b126 是 fileid 0105 是验证码 请求过去后返回的数据匹配下:form.setAttribute("action",saveCdnUrl+"这边就是文件下载真实地址"); |
![]() | 7 crab 2015-06-27 23:43:15 +08:00 上面那个匹配是保存的。下载文件是一个 POST。 <form style="width:1060px;" class="tform" id="d_down_from module:fileService action:downfile userId:wushangzhikong fileId:3a40b126 vid:86d11777 vid1:a11ded7c93db2928 md5:b28f5d1212a83443229f8df8993bee34 |
![]() | 12 crab 2015-06-27 23:54:05 +08:00 @wudaown 不是在js啊。如果你 fileid 和 验证码 都对,30秒后请求这2参数构成的 URL,页面得到的数据就包含上面那些参数了啊。 |
![]() | 14 crab 2015-06-27 23:56:59 +08:00 @wudaown 我测试是 get 一次下载页面先,再get 一次验证码,get 一次 file&验证码.html ,最后 post 下载。 |
![]() | 16 crab 2015-06-28 00:06:56 +08:00 @wudaown 延迟30秒后,访问 get 一次 file&验证码.html,这个页面里面的源码,有个 POST 就是下载那个按钮的。你直接 POST 这边,参数也这个页面提取。 |
![]() | 18 crab 2015-06-28 00:15:24 +08:00 @wudaown Javascript:{ck();document.getElementById('hidebtn').click();} 搜索:hidebtn http://img-storage.qiniudn.com/15-6-28/76058268.jpg |
![]() | 20 berry10086 2015-06-28 00:30:29 +08:00 via Android 我只想说,为什么不用requests |
21 wudaown OP @berry10086 能说一下思路么.. |
22 wudaown OP @crab 看了半天 你提到的内容都找到了.. 不过还是没有办法从验证码跳转到下载页面.. 还是没有办法提交验证码.. 你最后提到的那个按钮是在跳转后的页面.. 跳转的过程还是没有找到.. |
![]() | 23 Axurez 2015-06-28 03:39:24 +08:00 gist 为什么不加后缀名。。 |
![]() | 25 imn1 2015-06-28 11:03:45 +08:00 我怎么感觉你只是调试程序,没有抓包? |
![]() | 26 p1n3 2015-06-28 11:43:37 +08:00 楼主,一楼的button是怎么出来的呢? |
28 wudaown OP @imn1 在代码后面加个 a = opener() ; a.userAgent() ;a.imageHeader(); a.captchaOpener() 就看到结果了 |
![]() | 31 crab 2015-06-28 14:53:52 +08:00 @wudaown 1:Winhttp GET “http://p1.yunfile.com/fs/3wusahan4gzh0ikobng1268/" 取出 fileid 2:Winhttp GET “http://p1.yunfile.com/verifyimg/getPcv.html” 输入验证码 延迟30秒 3:Winhttp GET “http://p1.yunfile.com/file/down/wushangzhikong/fileid/验证码.html” 取出 form 4: Winhttp POST “http://dl212.yunfile.com/view?fid="+上面 form 地址 参数也是 form |
![]() | 32 erichuang1994 2015-06-28 14:56:50 +08:00 妹子为什么搞那两个站(K站 等)爬虫? |
![]() | 34 cc7756789 2015-06-28 15:20:09 +08:00 ![]() 你的类构造的很有问题,导致完全没法分析,有些属性应该放进__init__ 怀疑是你的代码把网页进行了刷新,导致你获取的验证码和当前网页不一致,而且你该贴出来你是怎么调用类的, 如果你不会使用类的话那么老老实实用函数的好,这是我登陆豆瓣的例子,也有验证码,https://github.com/ZhangHang-z/dung_beetle/blob/master/login_douban1.py |
36 wudaown OP @cc7756789 就是不熟悉才要联系学习吧.. __init__ 考虑过.. 现在不准备放.. 想先完整工作最后全部修改 |
38 wudaown OP @crab 就是说Winhttp GET “http://p1.yunfile.com/verifyimg/getPcv.html” 这一步就相当于输入验证码 只要等待30秒?然后直接到Winhttp GET “http://p1.yunfile.com/file/down/wushangzhikong/fileid/验证码.html”? |
![]() | 43 endoffight 2015-06-28 16:26:53 +08:00 via Android 楼主下完片记得和我们v友分享啊 |
44 wudaown OP @endoffight 我感觉要放弃了... 这我都搞不定.. |
![]() | 45 endoffight 2015-06-28 17:51:34 +08:00 via Android @wudaown 给我描述一下你的进度和问题 |
![]() | 46 RitzoneX 2015-06-28 18:21:19 +08:00 之前写过程序来刷下载流量,感觉yunfile很坑人,扣流量严重,对IP有限制 有时验证码输入正确,却跳回第一页,让你继续输验证码。。 |
47 wudaown OP @endoffight 感谢.. 想实现通过脚本读取预先保存的链接下载文件.. 目前进度.. 读取链接之后取得验证码,没有找到途径提交验证码.. 我贴出来的代码实现了读物和下载验证码.. 查看header发现验证码应该是对应其中一个referer header的 |
![]() | 49 crab 2015-06-28 19:06:16 +08:00 @wudaown 这个验证码不用提交的。验证码的作用只是给后面那个链接组合的。 302 跳转回去,要么是 Cookies ,要么是 referer 出问题了,我不清楚你这边用 Python 对 Cookies 是怎么处理的。昨天我测试直接没访问第一个请求的主页,直接请求验证码,指定 fileid,也是被302。 |
50 wudaown OP @crab 不访问第一个页面直接请求验证码我也试过 确实可以通过.. cookie和referer我抄录了昨天用fiddle抓取的.. 今天直接用了还是被302了.. 嘛 如果确定是cookie和referer的话 起码我清楚往哪个方向继续了.. |
![]() | 51 crab 2015-06-28 19:24:20 +08:00 @wudaown def imageHeader 这个里面你是不是指定了 cookies?你别指定 cookies,就第一次访问页面,返回 cookies 保存起来,第2次继续用。 |
55 wudaown OP @crab ![]() |
![]() | 56 RitzoneX 2015-06-28 22:40:44 +08:00 ![]() https://gist.github.com/RitzoneX/c8598c570b2c00b8eecb 用python2,验证码我用了pytesseract处理 |
57 spy8888 2015-06-28 22:44:19 +08:00 via iPhone 学习一下思路 |
58 wudaown OP @RitzoneX 感谢 我下周回去看看代码.. 你提到的验证码处理也是我想到的 .. 能问一下是不是有一份要分析js的吗? |
![]() | 59 endoffight 2015-06-29 07:46:47 +08:00 via Android @wudaown 不需要js,验证码对了就行 |
![]() | 60 endoffight 2015-06-29 09:11:54 +08:00 |
![]() | 61 binux 2015-06-29 10:59:53 +08:00 你并没有吧 cookiejar 保存下来,即你并没有在获取验证码的时候更新 cookie。 如果你稍微看一下验证码是怎么实现的,你就会爬了。 |