61 lines
1.5 KiB
JavaScript
61 lines
1.5 KiB
JavaScript
const path = require('path');
|
|
|
|
const pageCdpUrl = process.argv[2];
|
|
const filePath = process.argv[3];
|
|
|
|
async function uploadFile() {
|
|
const ws = new WebSocket(pageCdpUrl);
|
|
|
|
let msgId = 1;
|
|
const pending = new Map();
|
|
|
|
ws.addEventListener('message', function(event) {
|
|
const msg = JSON.parse(event.data);
|
|
if (msg.id && pending.has(msg.id)) {
|
|
const { resolve, reject } = pending.get(msg.id);
|
|
pending.delete(msg.id);
|
|
if (msg.error) reject(msg.error);
|
|
else resolve(msg.result);
|
|
}
|
|
});
|
|
|
|
function send(method, params = {}) {
|
|
return new Promise((resolve, reject) => {
|
|
const id = msgId++;
|
|
pending.set(id, { resolve, reject });
|
|
ws.send(JSON.stringify({ id, method, params }));
|
|
});
|
|
}
|
|
|
|
await new Promise(resolve => ws.addEventListener('open', resolve, { once: true }));
|
|
|
|
const docResult = await send('DOM.getDocument');
|
|
const { nodeId } = await send('DOM.querySelector', {
|
|
nodeId: docResult.root.nodeId,
|
|
selector: 'input[type="file"]'
|
|
});
|
|
|
|
if (!nodeId) {
|
|
console.error('File input not found');
|
|
process.exit(1);
|
|
}
|
|
|
|
const absolutePath = path.resolve(filePath);
|
|
console.log('Setting file:', absolutePath);
|
|
|
|
await send('DOM.setFileInputFiles', {
|
|
nodeId,
|
|
files: [absolutePath]
|
|
});
|
|
|
|
console.log('File upload triggered successfully');
|
|
|
|
await new Promise(resolve => setTimeout(resolve, 3000));
|
|
ws.close();
|
|
}
|
|
|
|
uploadFile().catch(err => {
|
|
console.error('Error:', err);
|
|
process.exit(1);
|
|
});
|