Skip to content

理念:任何操作都是Activity,组合拼接,扩展,基于配置的流程控制。

Notifications You must be signed in to change notification settings

xiangwenhu/sandcastle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

简介

轻轻的我走来,带走了一点点云彩。 自动爬网程序,可以基于json的配置转为爬网逻辑,无需编写爬网逻辑。

类型推到

https://juejin.cn/post/7436020932488151067

流程控制和 关联的Factory

类名 注册类型 是否有children 状态 说明
Activity - 活动基类
Container - 有children的活动基类
Code code 代码活动
Delay delay 延时活动
Parallel parallel 类似Promise.all
Race race 类似Promise.race
Sequence sequence 顺序执行的活动
While while while
Assert assert 断言,主要是配合while, ifelse使用
AssertSequence assertSequence 如果满足条件,顺序执行
IFElse ifElse if else
Request request 网络请求
Break break break,作用于继承于ContainerActivity的活动
Terminate terminate 终止整个流程
TryCatch tryCatch try catch
For for for
ParallelFor parallelFor parallel For
Function function 执行某个函数

fs

类名 注册类型 是否有children 状态 说明
WriteFile fs.writeFile 写文件
ReadFile fs.readFile 读文件(txt/json)
DownloadFile fs.downloadFile 下载文件
RemoveFile fs.removeFile 删除文件

爬网相关和关联的Factory

Page相关API,详情查看Page class | Puppeteer

类名 注册类型 是否有children 状态 说明
Browser c.browser 浏览器
Page c.page Page
GetCookie c.page.getCookie 获取页面的cookie
SetCookie c.page.setCookie 设置cookie
PageChild - page孩子,自带page,browser属性
Goto c.page.goto page.goto
Evaluate c.page.evaluate page.evaluate
Reload c.page.reload page.reload
Click c.page.click page.click
SetUserAgent c.page.setUserAgent page.setUserAgent
Url c.page.url page.url
Content c.page.content page.content
WaitForNavigation c.page.waitForNavigation page.waitForNavigation
WaitForRequest c.page.waitForRequest page.waitForRequest
WaitForResponse c.page.waitForResponse page.waitForResponse
GoBack c.page.goBack page.goBack
GoForward c.page.goForward page.goForward
Title c.page.title page.title
Close c.page.close page.close
IsClosed c.page.isClosed page.IsClosed
EvaluateClick c.page.eClick page.evaluate((el)=> el.click())
Type c.page.type page.type
WaitForSelector c.page.waitForSelector page.waitForSelector
Fetch c.page.fetch page.evaluate(()=>fetch()) (text
$Eval c.page.$eval page.$eval
$$Eval c.page.$$val page.$$eval
Focus c.page.focus page.focus
Hover c.page.hover page.hover
UploadFile c.page.uploadFile 上传文件
clearValue c.page.clearValue 清除输入控制的值
ExposeFunction c.page.exposeFunction 暴露函数
RemoveExposedFunction c.page.removeExposedFunction 删除暴露函数
Pdf c.page.pdf pdf
Screenshot c.page.screenshot 截屏
SetViewport c.page.setViewport setViewport
SetRequestInterception c.page.setRequestInterception setRequestInterception
SetExtraHTTPHeaders c.page.setExtraHTTPHeaders setExtraHTTPHeaders
SetGeolocation c.page.setGeolocation setGeolocation
AddStyleTag c.page.addStyleTag 添加style
AddScriptTag c.page.addScriptTag 添加script
Select c.page.select select选中
ActionActivity c.page.action 通用page方法操作
PropertyActivity c.page.property 通用page获取属性

键盘

类名 注册类型 是否有children 状态 说明
KeyboardDown c.page.keyboard.down 键down
KeyboardPress c.page.keyboard.press 键press
KeyboardSendCharacter c.page.keyboard.sendCharacter 键盘输入
KeyboardType c.page.keyboard.type 键盘输入
KeyboardUp c.page.keyboard.up 键盘up

鼠标

类名 注册类型 是否有children 状态 说明
MouseClick c.page.mouse.click 鼠标点
MouseDown c.page.mouse.down 鼠标down
MouseDrag c.page.mouse.drag 鼠标drag
MouseDragAndDrop c.page.mouse.dragAndDrop 鼠标dragAndDrop
MouseDragEnter c.page.mouse.dragEnter 鼠标dragEnter
MouseDragOver c.page.mouse.dragOver 鼠标dragOver
MouseDrop c.page.mouse.drop 鼠标drop
MouseMove c.page.mouse.move 鼠标move
MouseReset c.page.mouse.reset 鼠标reset
MouseUp c.page.mouse.up 鼠标up
MouseWheel c.page.mouse.wheel 鼠标wheel

logger [✅]

默认使用console,可以自定义logger.

消息

默认使用console,可以自定义logger.

可视化进度

已通过messenger传递状态,已提供getProgress生成状态树。

TODO::

  • 活动CodeActivity执行中,如何提供内置的变量或者方法
    • 动态函数 + 扩展运算符 $c:常量,$m 方法
  • 集合?变量?的操作和管理
    • 比如for循环
  • 注册函数和变量
// 使用 默认属性为 $c, 方法为 $m
addMethod("getName",function getName() {return "name"});
addVariable("money", 1000);
// 批量使用如下
batchaddVariables
batchaddMethods
  • 注册的函数和变量 只读 除 $v外, $c, $m, $a 添加的属性为只读
  • Activity.run 参数属性,例如$preRes, $$等的多级传递性
export type IActivityRunParams<EA = any, EE = Record<PropertyKey, any>> = {
    /**
     * 上一次执行结果
     */
    $preRes?: any;
    /**
     * 额外的属性,主要用于用户
     */
    $extra?: EE;
    /**
     * 额外的属性,用户活动扩展
     */
    $$: EA
};

export type IActivityExecuteParams<EA = any, EE = Record<PropertyKey, any>> = {
    /**
     * 上下文
     */
    $ctx: any;
    /**
     * 全局上下文
     */
    $gCtx: Record<PropertyKey, any>;
    /**
     * 内置常量
     */
    $c: Record<string, any>;
    /**
     * 内置方法
     */
    $m: Record<string, Function>;
    /**
     * 全局变量
     */
    $v: Record<string, any>;
    /**
     * 父节点
     */
    $parent: Activity | undefined;
    /**
     * 上一个活动的返回值
     */
    $res: any;
    /**
     * 活动本身
     */
    $a: Record<string, Activity>;
} & IActivityRunParams<EA, EE>;
  • ctx指向问题, useParentCtx即可使用父节点的ctx替换自身的ctx。 assert, before和after也适用
    • For
    • IFElse
    • Parallel
    • ParallelFor
    • Race
    • Sequence
    • While
    • All
    • doWhile
  • 改进或者删除AssertSequence
  • 给父节点打名称,通过名称访问
  • options 改进变量替换
  • globalContext的改进
    • 内置globalBuiltinContext
  • 支持多实例
  • register活动支持装饰器
  • 类似use,支持扩展Activities
  • BrowserActivity和PageActivity给IActivityExecuteParams分别暴露 $$.$browser$$.$page
  • 增强提示,类型推导,已知type,推导具体的 IActivityConfig (尤其是options) 2025-01-03
    • 一种是 ActConfigFor<Type extends ActivityType>
    • 一种是 $.for_
  • 扩展新的活动后,typescript如何职能提示
    1. 注册: 注册活动
    2. $HOC:获取带ts的方法
register("ccode", CCodeActivity);

const ccode = $.$HOC<CodeActivityContext, CodeActivityOptions>("ccode");

const activityProps = ccode({
    type: "ccode",
    name: "如果ctx.count小于5,加加",
    before: $.code({
        name: "",
        options: {
            code(param) {
                param.$$.ccc = 1000;
            }
        }
    }),
    toVariable: "sb",
    context: {
        count: 100
    },
    options: {
        // code:    "console.log('$tt', $$.$tt, $$.ccc);",
        code(params){
            console.log(params.$ctx.count)
        }
    },
});
  • puppeteer-core 替换 puppeteer 和 使用内置 uuid生成库 (2025-01-07)
  • 变量添加后,如何智能删除:
    执行前备份常量,变量,方法等,执行后把全局上下文的常量等恢复到执行前。
  • 修复createActivity问题,每个globalContext 自己独享 (2025-01-19)
  • 多次执行问题 (2025-01-20)
    每次根据配置创建新的实例,结合 《变量添加后,如何智能删除》
  • 演示示例和线上演示 (2025-01-18)
  • 进度对:before, after, assert的体现
  • 进度对 log的体现
  • 扩展的活动进度展示
  • 封装为库
  • 封装为库:基础版本 + 爬网版本
  • 保证paramObject的数据安全

About

理念:任何操作都是Activity,组合拼接,扩展,基于配置的流程控制。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published