解决了什么痛点?
你可能会问,为啥不用 fetch 或 Playwright/Crawlee ?
我不想重复造轮子,所以底层用了Crawlee 库来处理。
我的目标是在 Crawlee 之上构建一个跨引擎一致性:抽象/模拟 HTTP 与 Browser 的共有行为,声明式的“意图层”,让 AI 可以通过生成简单的 JSON 来“指挥”浏览器完成任务,而不是去写具体的执行代码。
核心功能
快速上手:提取个标题
注意,下面的代码不关心目标 URL 是静态还是动态的,extract 操作在两种模式下都有效。
import { fetchWeb } from '@isdk/web-fetcher';
async function getTitle(url: string) {
const { outputs } = await fetchWeb({
url,
actions: [
{
id: 'extract',
params: {
selector: 'title', // 提取 标签内容
},
storeAs: 'pageTitle', // 结果存到 outputs.pageTitle
},
],
});
console.log('页面标题:', outputs.pageTitle);
}
getTitle('https://www.');
进阶玩法:多步表单提交 (Google 搜索)
这个例子展示了如何用 JSON 指挥浏览器执行一系列动作。
import { fetchWeb } from '@isdk/web-fetcher';
async function searchGoogle(query: string) {
const { result } = await fetchWeb({
url: 'https://www.google.com',
engine: 'browser', // 显式指定需要浏览器环境
actions: [
// 步骤 1: 找到输入框并填入内容
{ id: 'fill', params: { selector: 'textarea[name=q]', value: query } },
// 步骤 2: 提交表单
{ id: 'submit', params: { selector: 'form' } },
// 步骤 3: 等待搜索结果容器加载出来
{ id: 'waitFor', params: { selector: '#search' } },
]
});
console.log('搜索结果页 URL:', result?.finalUrl);
}
searchGoogle('V2EX');
项目状态
项目刚起步,核心架构已经搭好。下一步计划是实现更智能的抓取策略(比如发现 http 模式拿不到内容时,自动升级到 browser 模式)。
项目是开源的,欢迎大家试用、Star 、提 Issue ,或者狠狠地拍砖!感谢。


