diff --git a/plugin/lib/quickcomposer/browser/browser.js b/plugin/lib/quickcomposer/browser/browser.js index ac52c18..73a71e8 100644 --- a/plugin/lib/quickcomposer/browser/browser.js +++ b/plugin/lib/quickcomposer/browser/browser.js @@ -326,7 +326,7 @@ const executeScript = async (tab, script, args = {}) => { const argValues = Object.values(args).map((v) => JSON.stringify(v)); const wrappedScript = ` - (function(${argNames.join(", ")}) { + (async function(${argNames.join(", ")}) { ${script} })(${argValues.join(", ")}) `; diff --git a/plugin/lib/quickcomposer/browser/execScript.js b/plugin/lib/quickcomposer/browser/execScript.js index 4075b18..21aec07 100644 --- a/plugin/lib/quickcomposer/browser/execScript.js +++ b/plugin/lib/quickcomposer/browser/execScript.js @@ -19,6 +19,27 @@ const inputText = async (tab, selector, text) => { ); }; +const submitForm = async (tab, buttonSelector, inputSelectors) => { + return await executeScript( + tab, + ` + const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); + let el = null; + ${inputSelectors + .map( + (i) => + `el = document.querySelector('${i.selector}'); + el.value = '${i.value}'; + el.dispatchEvent(new Event('input')); + el.dispatchEvent(new Event('change'));` + ) + .join("await sleep(200);")} + await sleep(200); + document.querySelector('${buttonSelector}').click(); + ` + ); +}; + const getText = async (tab, selector) => { return await executeScript( tab, @@ -116,6 +137,7 @@ const injectCSS = async (tab, css) => { module.exports = { clickElement, inputText, + submitForm, getText, getHtml, hideElement, diff --git a/src/js/composer/commands/browserCommands.js b/src/js/composer/commands/browserCommands.js index cc5f7b1..e8e6998 100644 --- a/src/js/composer/commands/browserCommands.js +++ b/src/js/composer/commands/browserCommands.js @@ -410,6 +410,30 @@ export const browserCommands = { }, ], }, + { + value: "quickcomposer.browser.submitForm", + label: "提交表单", + icon: "send", + config: [ + { + topLabel: "上方填要点击的提交按钮,下方添加要操作的输入框", + component: "ArrayEditor", + width: 12, + columns: { + selector: { + label: "输入框选择器", + options: { + cssSelector: true, + }, + }, + value: { + label: "要填入的值", + }, + }, + isCollapse: false, + }, + ], + }, { value: "quickcomposer.browser.getText", label: "获取文本",