Univer Clipsheet - 看我手把手教你从零开始构建自己的爬虫插件(2)
相关信息:
前言
1. 手动选择元素
"@univer-clipsheet-core/ui": "workspace:*"
import { ElementInspectService } from '@univer-clipsheet-core/ui'; const elementInspectService = new ElementInspectService(); elementInspectService.shadowComponent.onInspectElement((element) => { // 点击页面元素时,会触发该回调函数 console.log('Inspect Element:', element); }) setTimeout(() => { // 激活元素检查功能 elementInspectService.shadowComponent.activate() })
const last = <T>(arr: T[]) => arr[arr.length - 1]; elementInspectService.shadowComponent.onInspectElement((element) => { // 获取最近匹配到的table标签元素 const tableElement = last(checkElementTable(element)); // 获取最近匹配到的ExtractionParams对象 const tableExtractionParams = last(checkElementApproximationTable(element)); // 点击页面元素时,会触发该回调函数 console.log('Inspect Element:', element); if (tableElement) { // 如果点击的元素是table标签,则生成IInitialSheet对象 const sheet = generateSheetByElement(tableElement as HTMLTableElement); // 打印表格数据 console.log('Inspect Table:', sheet); // 最近匹配到的类表格元素 console.log('Inspect Table success with element:', tableElement); } else if (tableExtractionParams) { const sheet = generateSheetByExtractionParams(tableExtractionParams); // 打印表格数据 console.log('Inspect Table:', sheet); // 最近匹配到的类表格元素 console.log('Inspect Table success with element:', tableExtractionParams.element); } else { console.log('Not found table with element', element); } })
上面的代码的代码都有注释,可以了解具体做了些什么,主要是对元素进行最近 table 标签匹配或者类 table 元素的匹配,然后匹配成功后生成 initialSheet 的数据对象。
2. Ajax响应拦截
function interceptRequest(onResponse: (response: any) => void) { const XHR = XMLHttpRequest; const _fetch = fetch; const onReadyStateChange = async function (this: XMLHttpRequest) { if (this.readyState === 4) { onResponse(this.response); } }; // 拦截 XMLHttpRequest const innerXHR: typeof XMLHttpRequest = function () { const xhr = new XHR(); xhr.addEventListener('readystatechange', onReadyStateChange.bind(xhr), false); return xhr; }; innerXHR.prototype = XHR.prototype; Object.entries(XHR).forEach(([key, val]) => { // @ts-ignore innerXHR[key] = val; }); // 拦截 fetch const innerFetch: typeof _fetch = async (resource, initOptions) => { const getOriginalResponse = () => _fetch(resource, initOptions); const fetchedResponse = getOriginalResponse(); fetchedResponse.then((response) => { if (response instanceof Response) { try { response.clone() .json() .then((res) => onResponse(res)) .catch(() => { // Do nothing }); } catch (err) {} } }); return fetchedResponse; }; window.XMLHttpRequest = innerXHR; window.fetch = innerFetch; }
function serializeToJSON(response: unknown) { try { return JSON.parse(JSON.stringify(response)); } catch { return null; } } interceptRequest((res) => { // 发送消息到content script postMessage({ type: 'AJAX_INTERCEPT_MESSAGE', response: serializeToJSON(res), }); });
"build:ajax-interceptor": "npx esbuild src/ajax-interceptor.ts --bundle --outfile=public/ajax-interceptor.js"
// 启动AJAX拦截器 function startAjaxIntercept(scriptSrc: string, onMessage: (message: unknown) => void) { const script = document.createElement('script'); script.src = scriptSrc; script.onload = () => { window.addEventListener('message', event => { const message = event.data; if (message.type === 'AJAX_INTERCEPT_MESSAGE') { onMessage(message.response); } }); }; document.body.appendChild(script); return () => { script.remove(); }; } startAjaxIntercept(chrome.runtime.getURL('content/ajax-interceptor.js'), res => { if (res) { console.log('AJAX response', res); const sheets = ajaxJsonToTable([res as UnknownJson]); if (sheets.length > 0) { console.log('AJAX sheets from response', sheets); } } });
结语
- 想直接体验Univer Clipsheet功能的可直接下载商店版本: https://chromewebstore.google.com/detail/univer-clipsheet-an-ai-dr/mbcpbomfebacllmjjefeifejbbibbope
- 有问题或任何建议也可以直接到我们 github 仓库下提 issue: https://github.com/dream-num/univer-clipsheet

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Univer Go: 用电子表格一键实现报表设计器到底有多简单(内含源码)
定制化你的报表: hi👋 ,向大家推荐一款基于 Univer Go平台开发的智能模板—— Data Report。该模版内置了强大的TypeORM 库实现与数据库高效交互,在使用该模版时,你将拥有充分的自由度。 可以轻松切换数据库选项,灵活查询数据 根据实际需求自由选择字段,还能随心所欲地挑选报表样式 根据特殊需求修改脚本,定制出完全属于自己的专属报表。 同时 Data Report 让你无需脱离熟悉的电子表格操作环境,就能实现报表设计器的全部功能,真正开启数据处理的全新模式,为你带来便捷、高效的数据处理新体验 。 Univer Go 是一款高度可定制化的电子表格工具,能够根据用户需求构建一个性能与功能对标excel的电子表格。它支持灵活的功能扩展,涵盖基础数据处理、复杂的导入导出操作和协同功能,同时为 UI/UX 设计提供了定制空间,助力打造易用交互界面。此外,Univer Go 融合先进 AI 技术,配备了功能强大的脚本编写与执行工具,支持开发者创建和运行自动化脚本、进行数据库连接与数据读写管理以及开发自定义应用。无论是初学者还是专业开发者,都能凭借其简洁的操作逻辑和丰富功能支...
- 下一篇
JeecgBoot 对接本地化的大模型 DeepSeek-R1
第一步:下载安装 Ollama Ollama:可以理解为是 docker,快速安装各种大模型,下载后一键安装 下载地址:https://ollama.com 第二步:执行命令安装 deepseek-r1 ollama run deepseek-r1:14b 这里你可以搜索自己想安装的模型,获取不同的命令 第三步:输入问题 AI 回答 安装完成后,提示输入信息 好了,就这么简单,搭建私服 AI 完成。 查看本地安装了哪些 AI 大模型命令 ollama list 第四步:如何对接 jeecgboot 修改 jeecgboot 的 yml 文件,改成如下配置,这样就对接了本地私有化的 AI 模型。 jeecg: # AI集成 ai-chat: enabled: true model: deepseek-r1:14b apiKey: ollama apiHost: http://localhost:11434 timeout: 60 提问,发现回复多了个<think>标签,说明对接成功
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启