javascript 如何检测网站是否允许您上传文件?

vd8tlhqk  于 2023-01-24  发布在  Java
关注(0)|答案(3)|浏览(171)

我希望能够判断一个网站是否允许您上传文件。我可以想到两种主要的网站方式,理想情况下,我希望能够检测到这两种方式:

  • 按钮
  • 拖放

PhantomJS文档包含以下示例片段:

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

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

但我不清楚如何才能知道input[name=image]实际上支持上载。
目前,我的爬虫程序正在跟踪网站上的所有链接和按钮,但我不知道如何检测“文件上传弹出窗口已打开”。D&D的情况对我来说更不清楚。我需要一个单一页面的解决方案,显然我可以然后去应用于我通过的每一个页面。

UPDATE结果表明,大多数情况下,这是一个诀窍:

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

然而,D&D区域并不总是可点击的,你也不能总是假设[ondrop]会出现。有时候,drop侦听器是在代码中添加的:

object.addEventListener("drop", myScript);

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

dbf7pr2w

dbf7pr2w1#

您可以检查表单是否具有enctype=“multipart/form-data”,或在html页面中搜索具有type=file的输入。

ncgqoxb0

ncgqoxb02#

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

h7wcgrx3

h7wcgrx33#

没有什么能让你100%,但我认为99%,它与input[type=file]的工作,除非用户没有创建它在运行时使用javascript。
或者你可以检查form的enctype,但是它并不总是工作,因为用户很有可能将文件压缩并更改为base64,那么enctype就不需要是multipart/form-data了,所以input[type=file]是最好的方法。

相关问题