ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 998|回复: 32

[推荐] wps可以用fetch了,赶紧把20年前的cgi捡回来

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-12-2 10:33 | 显示全部楼层 |阅读模式
本帖最后由 wanghan519 于 2023-12-2 11:06 编辑

经大佬提醒,今天发现wps的js宏可以用fetch了,且允许跨域!!!

那么本地开个apache或者quickserv
https://github.com/jstrieb/quickserv
就可以用随便什么语言,写个处理标准输入写入标准输出的脚本,就可以在jsa里通过fetch处理数据了

另外网抓什么的也方便太多了

图中是个bat脚本的例子,bash、ahk、py、perl、php、go随便写点啥都能用了
image.jpg

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-12-4 11:15 | 显示全部楼层
JS了解的不多,请教,这个fetch在网抓方面,具体怎么应用呢?有应用的案例吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-12-4 11:35 | 显示全部楼层
本帖最后由 wanghan519 于 2023-12-4 12:18 编辑

和vba里的网抓一样,给它url,以及一系列headers、method之类的配置,它会返回网页,只是fetch是异步的,所以用then预先定义接收到数据之后的操作
(需要注意的是,比如在在金山文档里,如果没有官方提供的fetch,浏览器提供的fetch是禁止跨域的,所以没法网抓别的网站,但金山文档提供了一个跨域的fetch)

我试着自定义公式,在公式里网抓,发现必须使用同步的写法,这种情况下还是得用xmlhttprequest对象的同步写法,wps也有xmlhttprequest对象了!!!

fetch可以直接在浏览器F12里,网络,右键复制fetch命令,用起来比较爽,如图



至于楼上提到的cgi是这样的:
1. 用其他语言写最简单的命令是print 123这种,输出123到stdout,也都可以方便的从stdin读取数据,这种脚本写起来非常简单
2. 但是如果用vba里的wscript.shell运行外部命令,从stdin输入数据有4M的大小限制,以及,需要异步的边读取边写入,很不方便,且经常被防火墙报毒
3. cgi是个http服务器,从wps发送的get、post请求的body,会从stdin输入你写的脚本,然后把脚本stdout的输出返回给wps,不用在意传递的细节,脚本就当成处理本地管道的脚本写就行,print就行
4. quickserv是个最简单的cgi服务器,不需要配置,双击运行就行,会扫描当前文件夹里的可用的脚本
4. 然后现在wps有了方便的fetch或xmlhttprequest,那么把任何数据转json,然后发给cgi用任何语言处理一下在返回就行了,实际上需要写的代码非常少,就是个解析json再print的脚本,然后双击运行服务器。。。
5. cgi是非常古老的办法,过于灵活,如果脚本里允许其他用户在你的电脑上执行随意的脚本,就不太安全了,但自己用真的太方便,给别人用需要写的安全一点
动画.gif

TA的精华主题

TA的得分主题

发表于 2023-12-4 15:47 | 显示全部楼层
wanghan519 发表于 2023-12-4 11:35
和vba里的网抓一样,给它url,以及一系列headers、method之类的配置,它会返回网页,只是fetch是异步的,所 ...

讲得很专业,需要补充的知识太多了,还是非常感谢!

TA的精华主题

TA的得分主题

发表于 2023-12-13 23:35 来自手机 | 显示全部楼层
大哥,你用的是什么版本的WPS呢?
是不是必须要wps2023,就是12.0以上版本呀?

我的是2019的,版本号11.8.2.117118,根本用不了fetch啊,随便按你的代码逻辑写个get网页的,调试告诉我:fetch is not defined…

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-12-14 03:03 | 显示全部楼层
shier2817 发表于 2023-12-13 23:35
大哥,你用的是什么版本的WPS呢?
是不是必须要wps2023,就是12.0以上版本呀?

用的是12.1.0.15990版本,也就是这两天经大佬提醒才发现能用fetch的,12版本原来也是不行的

TA的精华主题

TA的得分主题

发表于 2023-12-14 16:55 来自手机 | 显示全部楼层
wanghan519 发表于 2023-12-14 03:03
用的是12.1.0.15990版本,也就是这两天经大佬提醒才发现能用fetch的,12版本原来也是不行的

谢谢大哥,我昨天尝试了,确实最新版的可以。
而且现在的免费版本怎么vba和js宏全都给用啊,还没看见有广告,真是良心。
我记得以前免费版广告多还没有vba,所以这两年我一直用的是那种政府版的,没想到现在官网的版本这么给力了,帅啊

TA的精华主题

TA的得分主题

发表于 2023-12-31 19:54 | 显示全部楼层
wanghan519 发表于 2023-12-4 11:35
和vba里的网抓一样,给它url,以及一系列headers、method之类的配置,它会返回网页,只是fetch是异步的,所 ...

请教楼主大佬:
下面的代码,在Edg浏览器中的控制台中可以正确运行并返回正确数据
        fetch("https://api.fund.eastmoney.com/favor/GetFundsInfo?", {
                "headers": {
                        "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
                },
                "referrer": "https://favor.fund.eastmoney.com/",
                "body": "fcodes=010685%2C012414",
                "method": "POST"
        }).then(e=>e.text()).then(console.log);
但在wps最新版12.1.0.16120的jsa宏中,返回的数据却不正确,是什么原因呢?
上述代码,是查询指定基金列表的数据

TA的精华主题

TA的得分主题

发表于 2024-1-1 11:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 ruirui5015 于 2024-1-1 11:18 编辑
一江春水1688 发表于 2023-12-31 19:54
请教楼主大佬:
下面的代码,在Edg浏览器中的控制台中可以正确运行并返回正确数据
        fetch("https://api ...


代码没问题,数据确实获取不到 {422EE38A-FF4F-4a2c-AC07-CC3A6C74B2FC}.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-1 13:52 | 显示全部楼层
本帖最后由 wanghan519 于 2024-1-1 15:20 编辑
一江春水1688 发表于 2023-12-31 19:54
请教楼主大佬:
下面的代码,在Edg浏览器中的控制台中可以正确运行并返回正确数据
        fetch("https://api ...

又搜了一会,referer好像才是拼写错误,但大多数工具接受headers里的referer。。。
浏览器统一使用referrer才是正确拼写,然后只在浏览器里这样。。。
所以改成headers里的referer就正常了,浏览器里referrer也是对的

image.png

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-3 13:31 , Processed in 0.051882 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表