urllib2 重定向之后登陆,下载文件的思路

2015 年 9 月 10 日
 cheerzeng
嗨,
最近有个活,写个脚本下载文件,然后这个链接用浏览器打开之后是会重定向到一个登陆页面的。
我现在的思路是先直接请求这个文档的链接,然后把返回的 cookie 存起来,接着再请求这个登录的页面,把表单的信息 post 过去,同时带上之前的 cookie.
不知道这个思路对不对,因为一直都没取到文档,只是得到了登录的页面。
4109 次点击
所在节点    Python
18 条回复
qq12365411
2015 年 9 月 10 日
推荐用 requests 这个包 urllib2 不太会

至于你的思路

你可以用 Selenium

Selenium 可以让你用脚本,控制他打开浏览器,输入密码,登陆,然后点击按钮 ,下载
C0VN
2015 年 9 月 10 日
requests 库会自动帮你解决掉 302 重定向的问题。还有登陆 session 的问题。
hahastudio
2015 年 9 月 10 日
可选(0. 访问下载文件的 URL )
1. 到登录页面, 登录,拿 cookie
2. 带着 cookie 访问下载文件的 URL
这样?
endoffight
2015 年 9 月 10 日
小伙子我看你骨骼惊奇,天庭饱满,并非凡人乃是百年不遇的奇才,我这儿有一份下载脚本,给你看看

http://www.phpgao.com/yum-file-downloader.html
shidenggui
2015 年 9 月 10 日
曾经的我也是使用 urllib2 ,直到我发现了 requests ,如果是批量的话推荐 scrapy
bdbai
2015 年 9 月 10 日
@qq12365411 控制浏览器这个思路明显没有直接发请求来的好 浏览器出点什么只有人清楚
cheerzeng
2015 年 9 月 11 日
@qq12365411 三种都试过, requests 好像跟 urllib2 差不多,可能 API 更加好用。
Selenium 的话遇到一个问题就是 IE 打开,会有弹出提示是否下载的窗口,这个貌似 selenium 解决不了,你有 idea 吗?
cheerzeng
2015 年 9 月 11 日
@xavierskip urllib2 页是能解决重定向的问题,昨天的紧张是,发现 post 是到了一个 https 的服务器上面去了,有个.fcc 的函数管理这个 post.现在没什么头绪去处理这个
cheerzeng
2015 年 9 月 11 日
@endoffight 谢谢,我试试
cheerzeng
2015 年 9 月 11 日
@shidenggui 不需要批量,就是单次可以了,想把这个登录的问题处理之后再考虑 scrapy
qq12365411
2015 年 9 月 11 日
@cheerzeng Selenium 可以 控制 chrome 火狐, 并且这 2 个浏览器 提供专门的 driver 建议弄 chrome ,具体请谷歌, 不要用 ie
cheerzeng
2015 年 9 月 11 日
@qq12365411 我一开始用 selenium ,然后有什么 profile 问题, ff 一直没打开我的 url,问了一个做自动化的前辈,说建议用 IE , profile 没那么复杂。
chrome 没试过,我看能不能试试,
问一下, selenium 有下载文件的 API 吗,如果只是点击下载按钮的话,怎么确保文件已经完整下载了?
qq12365411
2015 年 9 月 11 日
@cheerzeng 抱歉 我没有用过文件下载 你可以 搜索 selenium download file
cheerzeng
2015 年 9 月 11 日
@qq12365411 chrome default profile 加载有问题,不过先不管他了,准备查一下下载文件看看有没有工具可以检查。目前这是最简单的方法了
firebroo
2015 年 9 月 12 日
3 楼的做法可行啊。
cheerzeng
2015 年 9 月 13 日
@hahastudio @firebroo 我也是这个思路。但是最近发现里面的登录页面, post 处理是一个 https 地址,目前不知道是哪个地址,所以之前一直往原来的地址发 post 应该是错的,导致拿不到 cookie
firebroo
2015 年 9 月 13 日
@cheerzeng 可以用 burpsuite 抓包,把登陆验证的包抓下来。
cheerzeng
2015 年 9 月 14 日
@firebroo 谢谢,我还没用过这个工具,我试试。

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

https://v2ex.xtra.eu.org/t/219636

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

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

© 2021 V2EX