mirror of
https://github.com/fofolee/uTools-quickcommand.git
synced 2025-07-12 12:36:31 +08:00
289 lines
8.3 KiB
JavaScript
289 lines
8.3 KiB
JavaScript
/**
|
|
* 生成 UBrowser 代码
|
|
* @param {Object} configs UBrowser 配置对象
|
|
* @param {Array} selectedActions 已选择的操作列表
|
|
* @returns {string} 生成的代码
|
|
*/
|
|
import { defaultUBrowserConfigs } from "js/composer/ubrowserConfig";
|
|
|
|
export function generateUBrowserCode(configs, selectedActions) {
|
|
let code = "utools.ubrowser";
|
|
|
|
// 基础参数
|
|
// if (configs.useragent.value) {
|
|
// code += `\n .useragent('${configs.useragent.value}')`;
|
|
// }
|
|
|
|
if (configs.goto.url) {
|
|
let gotoOptionsStr = `\n .goto(\n`;
|
|
gotoOptionsStr += `${configs.goto.url}`;
|
|
|
|
if (configs.goto.headers.Referer || configs.goto.headers.userAgent) {
|
|
gotoOptionsStr += ",\n{";
|
|
if (configs.goto.headers.Referer) {
|
|
gotoOptionsStr += `\nReferer: ${configs.goto.headers.Referer}`;
|
|
}
|
|
if (configs.goto.headers.userAgent) {
|
|
gotoOptionsStr += `${
|
|
configs.goto.headers.Referer ? "," : ""
|
|
}\nuserAgent: ${configs.goto.headers.userAgent}`;
|
|
}
|
|
gotoOptionsStr += "\n}";
|
|
}
|
|
|
|
if (configs.goto.timeout !== 60000) {
|
|
gotoOptionsStr += `,\n${configs.goto.timeout}`;
|
|
}
|
|
|
|
gotoOptionsStr += "\n)";
|
|
code += gotoOptionsStr;
|
|
}
|
|
|
|
// 浏览器操作
|
|
selectedActions.forEach((action) => {
|
|
const config = configs[action.value];
|
|
switch (action.value) {
|
|
case "wait":
|
|
if (config.type === "time" && config.time) {
|
|
code += `\n .wait(${config.time})`;
|
|
} else if (config.type === "selector" && config.selector) {
|
|
code += `\n .wait(${config.selector}${
|
|
config.timeout !== 60000 ? `, ${config.timeout}` : ""
|
|
})`;
|
|
} else if (config.type === "function" && config.function) {
|
|
const functionBody = config.function.trim();
|
|
if (config.args?.length) {
|
|
const params = config.args.map((arg) => arg.name).join(", ");
|
|
const functionCode = `(${params}) => {\n ${functionBody} \n}`;
|
|
const args = `, ${config.timeout || 60000}, ${config.args
|
|
.map((arg) => JSON.stringify(arg.value))
|
|
.join(", ")}`;
|
|
code += `\n .wait(${functionCode}${args})`;
|
|
} else {
|
|
const functionCode = `() => {\n ${functionBody} \n}`;
|
|
code += `\n .wait(${functionCode}${
|
|
config.timeout !== 60000 ? `, ${config.timeout}` : ""
|
|
})`;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case "click":
|
|
if (config.selector) {
|
|
code += `\n .click(${config.selector})`;
|
|
}
|
|
break;
|
|
|
|
case "css":
|
|
if (config.value) {
|
|
code += `\n .css(${config.value})`;
|
|
}
|
|
break;
|
|
|
|
case "press":
|
|
if (config.key) {
|
|
const modifiers = config.modifiers.length
|
|
? `, ${JSON.stringify(config.modifiers)}`
|
|
: "";
|
|
code += `\n .press(${config.key}${modifiers})`;
|
|
}
|
|
break;
|
|
|
|
case "paste":
|
|
if (config.text) {
|
|
code += `\n .paste(${config.text})`;
|
|
}
|
|
break;
|
|
|
|
case "screenshot":
|
|
if (config.selector) {
|
|
code += `\n .screenshot(${config.selector}${
|
|
config.savePath ? `, '${config.savePath}'` : ""
|
|
})`;
|
|
} else if (config.rect) {
|
|
code += `\n .screenshot(${JSON.stringify(config.rect)}${
|
|
config.savePath ? `, ${config.savePath}` : ""
|
|
})`;
|
|
}
|
|
break;
|
|
|
|
case "pdf":
|
|
if (config.savePath) {
|
|
code += `\n .pdf(${config.savePath}${
|
|
config.options ? `, ${JSON.stringify(config.options)}` : ""
|
|
})`;
|
|
}
|
|
break;
|
|
|
|
case "device":
|
|
if (config.type === "preset" && config.deviceName) {
|
|
code += `\n .device(${config.deviceName})`;
|
|
} else if (config.type === "custom") {
|
|
let deviceOptionsStr = `\n .device(\n{`;
|
|
if (config.size) {
|
|
deviceOptionsStr += `\nsize: ${JSON.stringify(config.size)}`;
|
|
}
|
|
if (config.useragent) {
|
|
deviceOptionsStr += `${config.size ? "," : ""}\nuserAgent: ${
|
|
config.useragent
|
|
}`;
|
|
}
|
|
deviceOptionsStr += "\n}";
|
|
code += deviceOptionsStr + "\n)";
|
|
}
|
|
break;
|
|
|
|
case "cookies":
|
|
if (config.name) {
|
|
code += `\n .cookies(${config.name})`;
|
|
} else {
|
|
code += `\n .cookies()`;
|
|
}
|
|
break;
|
|
|
|
case "setCookies":
|
|
if (config.items?.length) {
|
|
let cookiesStr = `\n .setCookies([\n`;
|
|
config.items.forEach((item, index) => {
|
|
cookiesStr += " {";
|
|
if (item.name) cookiesStr += `\n name: ${item.name}`;
|
|
if (item.value)
|
|
cookiesStr += `${item.name ? "," : ""}\n value: ${
|
|
item.value
|
|
}}`;
|
|
if (index < config.items.length - 1) cookiesStr += ",";
|
|
cookiesStr += "\n";
|
|
});
|
|
cookiesStr += " ])";
|
|
code += cookiesStr;
|
|
}
|
|
break;
|
|
|
|
case "removeCookies":
|
|
if (config.name) {
|
|
code += `\n .removeCookies(${config.name})`;
|
|
}
|
|
break;
|
|
|
|
case "clearCookies":
|
|
code += `\n .clearCookies(${config.url || ""})`;
|
|
break;
|
|
|
|
case "evaluate":
|
|
if (config.function) {
|
|
const functionBody = config.function.trim();
|
|
if (config.args?.length) {
|
|
const params = config.args.map((arg) => arg.name).join(", ");
|
|
const functionCode = `(${params}) => {\n ${functionBody} \n}`;
|
|
const args = `, ${config.args
|
|
.map((arg) => JSON.stringify(arg.value))
|
|
.join(", ")}`;
|
|
code += `\n .evaluate(${functionCode}${args})`;
|
|
} else {
|
|
const functionCode = `() => {\n ${functionBody} \n}`;
|
|
code += `\n .evaluate(${functionCode})`;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case "when":
|
|
if (config.condition) {
|
|
code += `\n .when(${config.condition})`;
|
|
}
|
|
break;
|
|
|
|
case "mousedown":
|
|
case "mouseup":
|
|
if (config.selector) {
|
|
code += `\n .${action.value}(${config.selector})`;
|
|
}
|
|
break;
|
|
|
|
case "file":
|
|
if (config.selector && config.files?.length) {
|
|
let filesStr = `\n .file(${config.selector}, [\n`;
|
|
config.files.forEach((file, index) => {
|
|
filesStr += ` ${file}`;
|
|
if (index < config.files.length - 1) filesStr += ",\n";
|
|
});
|
|
filesStr += "\n ])";
|
|
code += filesStr;
|
|
}
|
|
break;
|
|
|
|
case "value":
|
|
if (config.selector) {
|
|
code += `\n .value(${config.selector}, ${config.value})`;
|
|
}
|
|
break;
|
|
|
|
case "check":
|
|
if (config.selector) {
|
|
code += `\n .check(${config.selector}${
|
|
config.checked !== undefined ? `, ${config.checked}` : ""
|
|
})`;
|
|
}
|
|
break;
|
|
|
|
case "focus":
|
|
if (config.selector) {
|
|
code += `\n .focus(${config.selector})`;
|
|
}
|
|
break;
|
|
|
|
case "scroll":
|
|
if (config.type === "element" && config.selector) {
|
|
code += `\n .scroll(${config.selector})`;
|
|
} else if (config.type === "position") {
|
|
if (config.x !== undefined && config.y !== undefined) {
|
|
code += `\n .scroll(${config.x}, ${config.y})`;
|
|
} else if (config.y !== undefined) {
|
|
code += `\n .scroll(${config.y})`;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case "download":
|
|
if (config.url) {
|
|
code += `\n .download(${config.url}${
|
|
config.savePath ? `, ${config.savePath}` : ""
|
|
})`;
|
|
}
|
|
break;
|
|
|
|
case "hide":
|
|
case "show":
|
|
code += `\n .${action.value}()`;
|
|
break;
|
|
|
|
case "devTools":
|
|
if (config.mode) {
|
|
code += `\n .devTools(${config.mode})`;
|
|
} else {
|
|
code += `\n .devTools()`;
|
|
}
|
|
break;
|
|
}
|
|
});
|
|
|
|
// 运行参数
|
|
const runOptions = {};
|
|
Object.entries(configs.run).forEach(([key, value]) => {
|
|
if (
|
|
value !== undefined &&
|
|
value !== null &&
|
|
value !== defaultUBrowserConfigs.run[key]
|
|
) {
|
|
runOptions[key] = value;
|
|
}
|
|
});
|
|
|
|
code += `\n .run(${
|
|
Object.keys(runOptions).length
|
|
? `\n${JSON.stringify(runOptions, null, 2).replace(/\n/g, "\n ")}`
|
|
: ""
|
|
})`;
|
|
|
|
return code;
|
|
}
|