实用脚本能批量上传吗?

wen 实用脚本 9

本文目录导读:

实用脚本能批量上传吗?

  1. 场景一:通过浏览器控制台上传(如网盘、后台管理系统)
  2. 场景二:使用命令行脚本(如Github Release、API上传、对象存储)
  3. 场景三:自动化测试工具(如Selenium、Playwright)
  4. 总结:哪种适合你?

可以,完全可以实现批量上传

但“批量上传”的具体实现方式取决于你提到的“实用脚本”指的是什么场景,下面我来拆解几种最常见的批量上传需求,并提供对应的解决方案和脚本思路。

场景一:通过浏览器控制台上传(如网盘、后台管理系统)

这是最常见的需求,如果一个网页的上传界面只允许“选择文件”,但你想一次性传几百个文件。

原理: 通过JavaScript脚本修改文件输入框的值,或触发文件选择器的webkitdirectory属性,甚至模拟拖拽事件。

实用脚本示例(在浏览器F12控制台运行):

// 方案A:最简单的 - 使用 webkitdirectory 属性(支持文件夹上传)
function uploadFolder() {
    var input = document.createElement('input');
    input.type = 'file';
    input.webkitdirectory = true; // 关键属性,允许选择整个文件夹
    input.onchange = function(e) {
        var files = e.target.files;
        console.log('选中了 ' + files.length + ' 个文件');
        // 这里需要模拟点击该网站的上传按钮,或者直接提交表单
        // 由于每个网站的上传逻辑不同,你需要找到页面上传按钮的ID或class
        // document.querySelector('#uploadBtn').click(); 
    };
    input.click();
}
uploadFolder();
// 方案B:手动创建一个包含多个文件的 DataTransfer 对象(更复杂,需要适配具体网站的上传API)
// 需要遍历本地文件,这个在浏览器沙箱里无法直接读取本地路径,所以通常方案A更实用

关键点: 大多数网站(如百度网盘、阿里云盘)的上传组件会监听input[type=file]change事件,你可以先用document.querySelector找到这个隐藏的输入框,然后用脚本修改它的files属性(但出于安全原因,直接修改files属性在很多浏览器中是被禁止的)。更推荐使用webkitdirectory来选择整个文件夹

场景二:使用命令行脚本(如Github Release、API上传、对象存储)

这是开发者最常用的方式,用Python、Shell或Node.js写一个脚本,循环上传文件。

实用脚本示例(Python):

import os
import requests
# 上传单个文件到某个API
def upload_file(file_path, api_url):
    with open(file_path, 'rb') as f:
        files = {'file': (os.path.basename(file_path), f)}
        response = requests.post(api_url, files=files)
        if response.status_code == 200:
            print(f"成功: {file_path}")
        else:
            print(f"失败: {file_path} - {response.text}")
# 批量上传指定文件夹下的所有文件
def batch_upload(folder_path, api_url):
    for filename in os.listdir(folder_path):
        full_path = os.path.join(folder_path, filename)
        if os.path.isfile(full_path):
            upload_file(full_path, api_url)
if __name__ == "__main__":
    batch_upload("./my_files/", "https://your-api.com/upload")

关键点: 你需要知道目标服务器的API接口地址(API_URL),如果涉及认证(如Token),需要在请求头中加上Authorization,对于大文件,可以加入concurrent.futures实现多线程上传,提高速度。

场景三:自动化测试工具(如Selenium、Playwright)

如果你需要模拟人在浏览器里操作,比如登录后,一个一个点“上传按钮”,可以选择文件。

实用脚本示例(Playwright - Python):

from playwright.sync_api import sync_playwright
import os
def batch_upload_with_playwright(folder_path, website_url):
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        page = browser.new_page()
        page.goto(website_url)
        # 假设页面上有一个 id 为 "fileInput" 的文件上传框
        input_element = page.locator('#fileInput')
        # 准备所有文件的绝对路径(用分号隔开,Windows支持)
        files = [os.path.abspath(os.path.join(folder_path, f)) 
                 for f in os.listdir(folder_path) 
                 if os.path.isfile(os.path.join(folder_path, f))]
        # 一次性设置所有文件(Playwright支持多文件上传)
        input_element.set_input_files(files)
        # 点击上传按钮
        page.locator('#uploadBtn').click()
        browser.close()

关键点: 这种方法最接近真实用户操作,能绕过一些复杂的JavaScript校验,但速度较慢,且需要根据具体网页的HTML结构调整选择器。

哪种适合你?

你的角色 推荐方案 理由
普通用户(上传到网盘) 方案1:浏览器控制台脚本 无需安装软件,直接在网页上操作,简单快捷。
开发者/运维(上传到服务器) 方案2:Python/Shell脚本 可控性强、速度快、能处理大量文件、易集成到CI/CD。
测试人员(需要模拟完整操作) 方案3:Playwright/Selenium 能处理复杂的前端交互,如拖拽、进度条、弹窗。

最后提醒:

  • 安全:不要运行来路不明的脚本。
  • 速率:批量上传上百个文件时,建议在循环中加一个time.sleep(0.5)(半秒延迟),避免被服务器判断为攻击而封IP。
  • 并发:如果上传是同一个接口,可以考虑用Python的ThreadPoolExecutor(线程池)实现并发,速度提升显著。

如果你有更具体的场景(比如想上传到哪个网站,或者用什么语言写脚本),可以告诉我,我可以帮你写一个更针对性的示例。

抱歉,评论功能暂时关闭!