如何用 Python 批量获取 onClick 弹窗的文件

2020-10-25 09:41:55 +08:00
 sxq
在用 python 爬取网站文档的过程中遇到了问题,目标文件没有链接,而是一个 onclick 弹窗,点击后出来一个另存对话框,需要输入文件名,然后点击保存完成下载。这个 onclick 调用的一个 js 函数,找不到 url 。网上查了一下可以通过 selenium 实现自动化操作,但是用这种方法要重复模拟登录,打开页面,处理弹窗,效率很低。我想用 python 批量获取这种文件,请问怎么实现?
2574 次点击
所在节点    Python
22 条回复
baba233
2020-10-25 09:54:14 +08:00
selenium 第一次登录保存 cookie,下次请求带上 cookie 直接访问这样?
sxq
2020-10-25 10:06:47 +08:00
@baba233 这个方法我试过了,cookie 是 httponly 的,cookie 带不进去,无法免登录
annielong
2020-10-25 14:01:30 +08:00
如果是系统对话框的话是直接输出了文件流,还是研究 js 吧,
sxq
2020-10-25 14:31:55 +08:00
@annielong 是的,直接输出了文件,没有 url,但我对 js 不熟,研究不出来。你能否留个联系方式,我把页面和 js 打包发你,你帮我看看?
imn1
2020-10-25 14:39:20 +08:00
url 是一定有的,浏览器查 request
sxq
2020-10-25 14:50:39 +08:00
@imn1 真的没有 url,大哥,楼上那位兄弟说的对,是输出了文件流,弹窗另存。
imn1
2020-10-25 15:07:41 +08:00
@sxq #6
不是没有,是你不知道怎么获取而已,http 协议不带 request ? server push 么?
不一定是个 url (get),可能是个 post 或者 xhr,request 总是有的,看你能不能组合出来并模拟发送
你需要能捕获 request 的工具
sxq
2020-10-25 15:15:08 +08:00
@imn1 谢谢解答,能不能留个联系方式,我把页面和 js 发你,帮我看一下。
imn1
2020-10-25 15:24:12 +08:00
@sxq #8
现在已经比较少搞爬虫了,规避风险,只玩自己需要的东西,而且低频避免触发对方的防护机制
另外,request 不是看 js 代码就能看出来的,主要手段是抓包
sxq
2020-10-25 15:29:20 +08:00
@imn1 我是用 Flidder 抓包的,但 request 里没有,到弹窗这一步就是 js 处理了,而且是调用 win 系统的对话框
renmu123
2020-10-25 20:38:47 +08:00
你把网站发出来看看,有感兴趣可能顺手就解决了
sxq
2020-10-25 21:54:27 +08:00
@renmu123 在内网,我把页面和 js 打包发你,帮我看一下可以吗?
fx0719
2020-10-26 09:30:55 +08:00
我也有个内部网站也是这样,然后看 js,自己网址拼接
sxq
2020-10-26 09:36:51 +08:00
sxq
2020-10-26 09:39:26 +08:00
@fx0719 麻烦有空帮我看一下,链接在上面,不能重复发,谢谢
lijialong1313
2020-10-26 10:00:54 +08:00
@imn1 我看了一眼他似乎是 OA 系统用 IEHelper 这类东西(是 ActiveX 来的吧)去下载的。
sxq
2020-10-26 10:18:23 +08:00
@lijialong1313 是的,这个文档应该怎么获取?
no1xsyzy
2020-10-26 13:18:23 +08:00
@sxq 假定 #16 是对的,那 ActiveX 是走编译的,别想从代码层面研究了
Fiddler 可能没法设置代理,进程不在浏览器上,代理设置了走不走都另说。
先 Wireshark 吧。
sxq
2020-10-26 13:37:08 +08:00
@no1xsyzy 好的,谢谢,我先去了解一下 wireshark
jeeyong
2020-10-27 22:41:46 +08:00
pyv8

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

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

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

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

© 2021 V2EX