注释
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import type { PlatformFieldConfig } from '@/types';
|
||||
import type { PlatformFieldConfig } from '@/types';
|
||||
|
||||
/** DOM 抓取后的通用结果结构。 */
|
||||
// DOM 抓取后的通用结果结构。
|
||||
export type DomScrapeResult = Record<string, unknown>;
|
||||
|
||||
|
||||
@@ -19,10 +19,12 @@ export async function scrapeDomFields(fields: PlatformFieldConfig[]): Promise<Do
|
||||
}
|
||||
|
||||
|
||||
/** 睡眠工具,给点击、翻页、异步渲染留出等待时间。 */
|
||||
// 睡眠工具,给点击、翻页、异步渲染留出等待时间。
|
||||
const sleep = (ms?: number) => new Promise((resolve) => window.setTimeout(resolve, ms ?? 1500));
|
||||
|
||||
/** 从元素中提取实际值,默认取文本,也支持 attr、图片 src、链接 href。 */
|
||||
/**
|
||||
* 从元素中提取实际值,默认取文本,也支持 attr、图片 src、链接 href。
|
||||
*/
|
||||
function extractValue(el: Element | null, config: PlatformFieldConfig): string | null {
|
||||
if (!el) {
|
||||
return null;
|
||||
@@ -46,7 +48,9 @@ function extractValue(el: Element | null, config: PlatformFieldConfig): string |
|
||||
return (el.textContent || '').replace(/\n/g, '').trim();
|
||||
}
|
||||
|
||||
/** 根据字段 condition 配置在指定 DOM 范围内自动点击目标元素。 */
|
||||
/**
|
||||
* 根据字段 condition 配置在指定 DOM 范围内自动点击目标元素。
|
||||
*/
|
||||
async function autoClick(config: PlatformFieldConfig, rootDom: ParentNode): Promise<void> {
|
||||
if (!config.condition) {
|
||||
return;
|
||||
@@ -62,7 +66,9 @@ async function autoClick(config: PlatformFieldConfig, rootDom: ParentNode): Prom
|
||||
}
|
||||
}
|
||||
|
||||
/** 递归处理字段配置,支持普通字段、嵌套 row、列表和表格。 */
|
||||
/**
|
||||
* 递归处理字段配置,支持普通字段、嵌套 row、列表和表格。
|
||||
*/
|
||||
async function processFields(columns: PlatformFieldConfig[], rootDom: ParentNode): Promise<DomScrapeResult> {
|
||||
const result: DomScrapeResult = {};
|
||||
|
||||
@@ -100,7 +106,9 @@ async function processFields(columns: PlatformFieldConfig[], rootDom: ParentNode
|
||||
return result;
|
||||
}
|
||||
|
||||
/** 按列表配置抓取所有列表项,并按分页配置继续翻页。 */
|
||||
/**
|
||||
* 按列表配置抓取所有列表项,并按分页配置继续翻页。
|
||||
*/
|
||||
async function processList(config: PlatformFieldConfig, rootDom: ParentNode): Promise<DomScrapeResult[]> {
|
||||
const allList: DomScrapeResult[] = [];
|
||||
let pageCount = 0;
|
||||
@@ -148,7 +156,9 @@ async function processList(config: PlatformFieldConfig, rootDom: ParentNode): Pr
|
||||
return allList;
|
||||
}
|
||||
|
||||
/** 按表格配置抓取表格行数据,并按分页配置继续翻页。 */
|
||||
/**
|
||||
* 按表格配置抓取表格行数据,并按分页配置继续翻页。
|
||||
*/
|
||||
async function processTable(config: PlatformFieldConfig, rootDom: ParentNode): Promise<DomScrapeResult[]> {
|
||||
const allTableData: DomScrapeResult[] = [];
|
||||
let pageCount = 0;
|
||||
@@ -221,4 +231,4 @@ async function processTable(config: PlatformFieldConfig, rootDom: ParentNode): P
|
||||
}
|
||||
|
||||
return allTableData;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user