【问题标题】:How to detect if a site lets you upload files?如何检测网站是否允许您上传文件?
【发布时间】:2022-01-19 12:46:04
【问题描述】:

我想知道某个网站是否允许您上传文件。我可以想到网站执行此操作的两种主要方式,理想情况下我希望能够同时检测到这两种方式:

  • 按钮
  • 拖放

PhantomJS 文档中有这个例子 sn-p:

var webPage = require('webpage');
var page = webPage.create();

page.uploadFile('input[name=image]', '/path/to/some/photo.jpg');

但我不清楚我是如何确定input[name=image] 实际支持上传的。

目前,我的爬虫正在跟踪网站上的所有链接和按钮,但我不确定如何检测“文件上传弹出窗口已打开”。对我来说,D&D 案子就更不清楚了。我需要一个单一页面的解决方案,显然我可以将它应用到我通过的每个页面。

更新 事实证明,这在大多数情况下都可以解决问题:

document.querySelector('input[type=file]').click()

但是,D&D 区域并不总是可点击的,您不能总是假设[ondrop] 会出现。有时,在代码中添加了 drop listener:

object.addEventListener("drop", myScript);

那我如何检查这些元素的存在呢?

【问题讨论】:

  • input[type=file] 怎么样?
  • 你的目标是什么?
  • 识别互联网上的cyberlocker网站,这是一个非常强大的功能
  • 答案是,你不能。文件上传/下载甚至不必通过 UI 进行。所以,我不知道你的具体要求是什么,但如果你需要任何可靠性,你应该重新评估什么是可能的。

标签: javascript selenium web-scraping file-upload web-crawler


【解决方案1】:

您可以检查表单是否有 enctype="multipart/form-data"。或在 html 页面中使用 type=file 搜索输入。

【讨论】:

    【解决方案2】:

    AFAIK 使用 selenium 上传文件的最佳方法是将要上传的文件直接发送到此 CSS 选择器 input[type=file] 所在的元素。
    因此,为了检查某些网页是否支持文件上传,您可以检查该页面是否包含 input[type=file] 元素。
    此元素通常不可见且不能通过 GUI 交互,因此您只能检查它的存在,而不是可见性等。

    【讨论】:

      【解决方案3】:

      没有什么能让你达到 100%,但我认为 99% 可以与 input[type=file] 一起使用,除非用户没有在运行时使用 javascript 创建它。

      或者您可以检查表单的 enctype,但它并不总是有效,因为用户很有可能将文件压缩并更改为 base64,那么 enctype 就不需要是 multipart/form-data。 所以input[type=file]是最好的办法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-17
        • 1970-01-01
        • 2013-06-29
        • 2021-12-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多