如何通过XMLHttpRequest获取谷歌云盘共享文件夹全部文件?
解决谷歌云盘共享文件夹全文件列表获取问题
你的问题核心在于:谷歌云盘共享文件夹采用前端滚动动态加载机制,初始HTML仅包含部分文件,剩余内容需要浏览器执行JS、触发滚动事件后才会加载。而XMLHttpRequest只能获取初始静态HTML,无法模拟浏览器的渲染和JS执行流程,所以拿不到全部文件。
纯前端方案(仅用浏览器端JS)无法实现,因为浏览器的同源策略和静态HTML的局限性,没法在请求后动态触发滚动加载。这里推荐用Headless浏览器工具Puppeteer来模拟完整的浏览器操作,无需Google Drive API,具体步骤如下:
步骤1:安装Puppeteer
首先确保你安装了Node.js,然后执行命令:
npm install puppeteer
步骤2:编写获取全文件列表的代码
创建一个.js文件(比如getDriveFiles.js),写入以下代码:
const puppeteer = require('puppeteer'); (async () => { // 启动Headless浏览器 const browser = await puppeteer.launch({ headless: 'new' }); const page = await browser.newPage(); // 打开目标谷歌云盘文件夹页面 const driveUrl = 'https://drive.google.com/drive/folders/1HyDpcxgsYjpGQ4hqw7EqwShsRtPzqYyi?usp=share_link'; await page.goto(driveUrl, { waitUntil: 'networkidle2' }); // 循环滚动到底部,直到没有新内容加载 let previousHeight = 0; while (true) { // 滚动到当前页面底部 await page.evaluate('window.scrollTo(0, document.body.scrollHeight)'); // 等待1秒让新内容加载(可根据网络情况调整) await page.waitForTimeout(1000); // 获取当前页面高度 const currentHeight = await page.evaluate('document.body.scrollHeight'); // 如果高度不再变化,说明所有内容已加载完成 if (currentHeight === previousHeight) break; previousHeight = currentHeight; } // 提取所有文件的名称和链接 const files = await page.evaluate(() => { const fileElements = document.querySelectorAll('.Q5txwe'); return Array.from(fileElements).map(el => ({ name: el.textContent.trim(), link: el.querySelector('a').href })); }); // 输出结果 console.log('所有文件列表:', files); console.log(`共获取到${files.length}个文件`); // 关闭浏览器 await browser.close(); })();
步骤3:运行代码
在终端执行:
node getDriveFiles.js
关键说明
- Puppeteer模拟了真实浏览器的行为,包括执行页面JS、触发滚动事件,因此能加载所有动态内容。
- 代码中的
waitForTimeout(1000)可以根据你的网络速度调整,确保新内容有足够时间加载。 - 若文件加载速度较慢,可以适当延长等待时间,或者改用更精准的等待方式(比如等待新的文件元素出现)。
内容的提问来源于stack exchange,提问作者Amr Sharaki
相关产品推荐
相关产品推荐

