需求:通过Node.js实现DOAJ平台XML文件上传自动化
实现DOAJ XML文件自动上传的Node.js方案
背景说明
DOAJ目前没有提供专门用于XML文件自动上传的公开API,仅支持网页端手动上传操作。要实现流程自动化,只能通过模拟浏览器手动操作的方式完成。
技术选型
使用puppeteer(无头Chrome/Chromium操作库)来模拟完整的上传流程,包括登录、导航上传页面、文件选择、提交等步骤。
实现步骤
1. 安装依赖
npm install puppeteer
2. 核心代码示例
const puppeteer = require('puppeteer'); const path = require('path'); (async () => { // 启动浏览器,设置headless: false可查看可视化操作过程 const browser = await puppeteer.launch({ headless: true }); const page = await browser.newPage(); try { // 导航到DOAJ登录页 await page.goto('https://doaj.org/account/login'); // 填写账号密码(替换为你的DOAJ账号信息) await page.type('#email', 'your-doaj-email@example.com'); await page.type('#password', 'your-doaj-password'); await page.click('button[type="submit"]'); await page.waitForNavigation({ waitUntil: 'networkidle2' }); // 导航到XML上传页面(路径根据实际页面调整) await page.goto('https://doaj.org/journal/update'); await page.waitForSelector('input[type="file"]'); // 上传本地XML文件(替换为你的文件路径) const filePath = path.resolve(__dirname, 'target-journal.xml'); const fileInput = await page.$('input[type="file"]'); await fileInput.uploadFile(filePath); // 提交上传(按钮选择器根据实际页面调整) await page.click('button#submit-xml'); await page.waitForNavigation({ waitUntil: 'networkidle2' }); console.log('XML文件上传完成'); } catch (error) { console.error('上传失败:', error); } finally { await browser.close(); } })();
关键注意事项
- 替换代码中的账号密码、文件路径、页面元素选择器为实际值(可通过浏览器开发者工具查看元素选择器)。
- DOAJ页面结构可能会更新,若代码失效,需重新核对页面元素的选择器。
- 避免频繁执行自动化操作,防止触发平台反爬机制导致账号受限。
- 批量上传时,可循环处理文件列表,注意添加适当延迟(如
await page.waitForTimeout(1000))避免操作过快。
内容的提问来源于stack exchange,提问作者Mahe
相关产品推荐
相关产品推荐

