我希望能够判断一个网站是否允许您上传文件。我可以想到两种主要的网站方式,理想情况下,我希望能够检测到这两种方式:
- 按钮
- 拖放
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);
那么我如何检查这些元素的存在呢?
3条答案
按热度按时间dbf7pr2w1#
您可以检查表单是否具有enctype=“multipart/form-data”,或在html页面中搜索具有type=file的输入。
ncgqoxb02#
AFAIK使用selenium上传文件的最佳方法是将要上传的文件直接发送到该CSS Selector
input[type=file]
所定位的元素。因此,为了检查一些网页是否支持文件上传,您可以通过检查该页面是否包含
input[type=file]
元素。此元素通常不可见,也不可通过GUI交互,因此您只能检查其是否存在,而不能检查其可见性等。
h7wcgrx33#
没有什么能让你100%,但我认为99%,它与
input[type=file]
的工作,除非用户没有创建它在运行时使用javascript。或者你可以检查form的enctype,但是它并不总是工作,因为用户很有可能将文件压缩并更改为base64,那么enctype就不需要是multipart/form-data了,所以
input[type=file]
是最好的方法。