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