code optimize
This commit is contained in:
@ -4,21 +4,36 @@
|
||||
* @param {Array<string>} fieldSelectors fields selectors for selecting fields (data columns) under each item
|
||||
* @param {...any} args url list / url templates, page numers, either [from, to, interval] or [...pages]
|
||||
*/
|
||||
function extract(itemsSelector, fieldSelectors, ...args) {
|
||||
async function extract(itemsSelector, fieldSelectors, ...args) {
|
||||
let data = await extractData(itemsSelector, fieldSelectors, ...args);
|
||||
data.unshift(fieldSelectors);
|
||||
saveFileAsk(data);
|
||||
resolve("save done.")
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract data from current tab / multiple urls.
|
||||
* @param {string} itemsSelector items selectors for selecting items (data rows)
|
||||
* @param {Array<string>} fieldSelectors fields selectors for selecting fields (data columns) under each item
|
||||
* @param {...any} args url list / url templates, page numers, either [from, to, interval] or [...pages]
|
||||
*/
|
||||
async function extractData(itemsSelector, fieldSelectors, ...args) {
|
||||
let urls = [];
|
||||
let listOrTempl = args.shift();
|
||||
if (listOrTempl instanceof Array) {
|
||||
urls = listOrTempl;
|
||||
} else if (url) {
|
||||
let urlTempl = listOrTempl;
|
||||
if (args[0] instanceof Array) {
|
||||
urls = args[0].map(p => urlTempl.replace("${page}", p));
|
||||
} else if (args.length >= 3) {
|
||||
let from = args.shift();
|
||||
let to = args.shift();
|
||||
let interval = args.shift();
|
||||
for (let i = from; i <= to; i += interval) {
|
||||
urls.push(urlTempl.replace("${page}", i));
|
||||
let arg = args.shift();
|
||||
if (arg instanceof Array) {
|
||||
urls = arg;
|
||||
} else {
|
||||
let urlTempl = arg;
|
||||
if (urlTempl) {
|
||||
if (args[0] instanceof Array) {
|
||||
urls = args[0].map(p => urlTempl.replace("${page}", p));
|
||||
} else if (args.length >= 3) {
|
||||
let from = args.shift();
|
||||
let to = args.shift();
|
||||
let interval = args.shift();
|
||||
for (let i = from; i <= to; i += interval) {
|
||||
urls.push(urlTempl.replace("${page}", i));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -35,20 +50,18 @@ function extract(itemsSelector, fieldSelectors, ...args) {
|
||||
results => {
|
||||
data.push(...results);
|
||||
return redirectTab(tab, url).then(
|
||||
() => extractData(tab, itemsSelector, fieldSelectors)
|
||||
() => extractTabData(tab, itemsSelector, fieldSelectors)
|
||||
);
|
||||
},
|
||||
() => p
|
||||
), Promise.resolve([]));
|
||||
} else {
|
||||
pms = extractData(tab, itemsSelector, fieldSelectors);
|
||||
pms = extractTabData(tab, itemsSelector, fieldSelectors);
|
||||
}
|
||||
pms.then(
|
||||
results => {
|
||||
data.push(...results);
|
||||
data.unshift(fieldSelectors);
|
||||
saveFileAsk(data);
|
||||
resolve("save done.")
|
||||
resolve(data);
|
||||
},
|
||||
err => reject(err)
|
||||
);
|
||||
@ -74,13 +87,13 @@ function redirectTab(tab, url) {
|
||||
}
|
||||
|
||||
/**
|
||||
* extract data in from the target tab, usually used to detect if the content script is ready.
|
||||
* extract data in from the target tab.
|
||||
* @param {any} tab target tab
|
||||
* @param {string} itemsSelector items selectors for selecting items (data rows)
|
||||
* @param {Array<string>} fieldSelectors fields selectors for selecting fields (data columns) under each item
|
||||
* @returns {Promise<string[]>} a promise of extracted data
|
||||
*/
|
||||
function extractData(tab, itemsSelector, fieldSelectors) {
|
||||
function extractTabData(tab, itemsSelector, fieldSelectors) {
|
||||
let req = {
|
||||
from: "DataExtracter:Extract",
|
||||
itemsSelector: itemsSelector,
|
||||
|
||||
Reference in New Issue
Block a user