channel-worker 1.1.4 → 1.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/command-poller.js +20 -11
- package/package.json +1 -1
package/lib/command-poller.js
CHANGED
|
@@ -650,20 +650,29 @@ class CommandPoller {
|
|
|
650
650
|
console.log(`[commands] File chooser: ${chooserResult}`);
|
|
651
651
|
|
|
652
652
|
if (chooserResult === 'opened') {
|
|
653
|
-
// File chooser intercepted —
|
|
654
|
-
// Find the file input that triggered the chooser
|
|
653
|
+
// File chooser intercepted — set file + trigger events
|
|
655
654
|
const doc = await send('DOM.getDocument');
|
|
656
|
-
|
|
657
|
-
if (!
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
655
|
+
let targetNode = await send('DOM.querySelector', { nodeId: doc.root.nodeId, selector: 'input[type="file"][accept*="image"]' });
|
|
656
|
+
if (!targetNode?.nodeId) {
|
|
657
|
+
targetNode = await send('DOM.querySelector', { nodeId: doc.root.nodeId, selector: 'input[type="file"]' });
|
|
658
|
+
}
|
|
659
|
+
if (targetNode?.nodeId) {
|
|
660
|
+
await send('DOM.setFileInputFiles', { nodeId: targetNode.nodeId, files: [file_path] });
|
|
661
|
+
// Trigger change/input events so React picks it up
|
|
662
|
+
await send('Runtime.evaluate', {
|
|
663
|
+
expression: `
|
|
664
|
+
const inputs = document.querySelectorAll('input[type="file"]');
|
|
665
|
+
inputs.forEach(inp => {
|
|
666
|
+
inp.dispatchEvent(new Event('change', { bubbles: true, composed: true }));
|
|
667
|
+
inp.dispatchEvent(new Event('input', { bubbles: true, composed: true }));
|
|
668
|
+
});
|
|
669
|
+
'triggered'
|
|
670
|
+
`,
|
|
671
|
+
});
|
|
665
672
|
}
|
|
673
|
+
// Disable intercept + wait for Facebook to process
|
|
666
674
|
await send('Page.setInterceptFileChooserDialog', { enabled: false });
|
|
675
|
+
await new Promise(r => setTimeout(r, 2000));
|
|
667
676
|
ws.close();
|
|
668
677
|
resolve({ success: true, method: 'file_chooser_intercepted' });
|
|
669
678
|
} else {
|