V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
sxq
V2EX  ›  Python

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

  •  
  •   sxq · 2020-10-25 09:41:55 +08:00 via iPhone · 2662 次点击
    这是一个创建于 1519 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在用 python 爬取网站文档的过程中遇到了问题,目标文件没有链接,而是一个 onclick 弹窗,点击后出来一个另存对话框,需要输入文件名,然后点击保存完成下载。这个 onclick 调用的一个 js 函数,找不到 url 。网上查了一下可以通过 selenium 实现自动化操作,但是用这种方法要重复模拟登录,打开页面,处理弹窗,效率很低。我想用 python 批量获取这种文件,请问怎么实现?
    22 条回复    2020-10-29 12:53:31 +08:00
    baba233
        1
    baba233  
       2020-10-25 09:54:14 +08:00 via Android
    selenium 第一次登录保存 cookie,下次请求带上 cookie 直接访问这样?
    sxq
        2
    sxq  
    OP
       2020-10-25 10:06:47 +08:00 via iPhone
    @baba233 这个方法我试过了,cookie 是 httponly 的,cookie 带不进去,无法免登录
    annielong
        3
    annielong  
       2020-10-25 14:01:30 +08:00
    如果是系统对话框的话是直接输出了文件流,还是研究 js 吧,
    sxq
        4
    sxq  
    OP
       2020-10-25 14:31:55 +08:00 via iPhone
    @annielong 是的,直接输出了文件,没有 url,但我对 js 不熟,研究不出来。你能否留个联系方式,我把页面和 js 打包发你,你帮我看看?
    imn1
        5
    imn1  
       2020-10-25 14:39:20 +08:00
    url 是一定有的,浏览器查 request
    sxq
        6
    sxq  
    OP
       2020-10-25 14:50:39 +08:00 via iPhone
    @imn1 真的没有 url,大哥,楼上那位兄弟说的对,是输出了文件流,弹窗另存。
    imn1
        7
    imn1  
       2020-10-25 15:07:41 +08:00
    @sxq #6
    不是没有,是你不知道怎么获取而已,http 协议不带 request ? server push 么?
    不一定是个 url (get),可能是个 post 或者 xhr,request 总是有的,看你能不能组合出来并模拟发送
    你需要能捕获 request 的工具
    sxq
        8
    sxq  
    OP
       2020-10-25 15:15:08 +08:00 via iPhone
    @imn1 谢谢解答,能不能留个联系方式,我把页面和 js 发你,帮我看一下。
    imn1
        9
    imn1  
       2020-10-25 15:24:12 +08:00
    @sxq #8
    现在已经比较少搞爬虫了,规避风险,只玩自己需要的东西,而且低频避免触发对方的防护机制
    另外,request 不是看 js 代码就能看出来的,主要手段是抓包
    sxq
        10
    sxq  
    OP
       2020-10-25 15:29:20 +08:00 via iPhone
    @imn1 我是用 Flidder 抓包的,但 request 里没有,到弹窗这一步就是 js 处理了,而且是调用 win 系统的对话框
    renmu123
        11
    renmu123  
       2020-10-25 20:38:47 +08:00 via Android
    你把网站发出来看看,有感兴趣可能顺手就解决了
    sxq
        12
    sxq  
    OP
       2020-10-25 21:54:27 +08:00 via iPhone
    @renmu123 在内网,我把页面和 js 打包发你,帮我看一下可以吗?
    fx0719
        13
    fx0719  
       2020-10-26 09:30:55 +08:00 via iPhone
    我也有个内部网站也是这样,然后看 js,自己网址拼接
    sxq
        14
    sxq  
    OP
       2020-10-26 09:36:51 +08:00 via iPhone
    sxq
        15
    sxq  
    OP
       2020-10-26 09:39:26 +08:00 via iPhone
    @fx0719 麻烦有空帮我看一下,链接在上面,不能重复发,谢谢
    lijialong1313
        16
    lijialong1313  
       2020-10-26 10:00:54 +08:00
    @imn1 我看了一眼他似乎是 OA 系统用 IEHelper 这类东西(是 ActiveX 来的吧)去下载的。
    sxq
        17
    sxq  
    OP
       2020-10-26 10:18:23 +08:00 via iPhone
    @lijialong1313 是的,这个文档应该怎么获取?
    no1xsyzy
        18
    no1xsyzy  
       2020-10-26 13:18:23 +08:00
    @sxq 假定 #16 是对的,那 ActiveX 是走编译的,别想从代码层面研究了
    Fiddler 可能没法设置代理,进程不在浏览器上,代理设置了走不走都另说。
    先 Wireshark 吧。
    sxq
        19
    sxq  
    OP
       2020-10-26 13:37:08 +08:00 via iPhone
    @no1xsyzy 好的,谢谢,我先去了解一下 wireshark
    jeeyong
        20
    jeeyong  
       2020-10-27 22:41:46 +08:00
    pyv8
    lijialong1313
        21
    lijialong1313  
       2020-10-29 10:33:40 +08:00
    @sxq 有一个很暴力的方法,听说过按键精灵吗?
    llsquaer
        22
    llsquaer  
       2020-10-29 12:53:31 +08:00
    如果不是效率优先的需求.....实在不行 使用 seleniumIDE 插件 火狐,谷歌都有..在当前使用的浏览器上录制动作....就不用考虑 cookies js 之类的了..因为本来就是你本机浏览器 ...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2464 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:27 · PVG 08:27 · LAX 16:27 · JFK 19:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.