js jq 如何进行页面采集(或测试)
首先需要指出的是,js jq是不可能实现页面采集的,但有时候作为前端开发,又想要一种轻量级的解决方案实现页面中某些特定信息的获取,目前可行的最简单的办法也需要在后端实现采集功能,如果目标页面是动态的,就还需要借助某些开源框架,总的来说就是太“重”了。于是我考虑将现有的一些页面测试技术进行了整合,并提供统一的http接口,一个是自用,另一个是对外提供服务。目前还处于构想和实验阶段,简单地实现了一个动态页面的解析接口,可以将你提交的网页链接进行解析,生成经js处理后的html代码。当然这个速度是比较慢的,整个流程走下来最快也要10秒左右。不过目前是针对比较复杂的js页面,后续考虑采用多种框架,解决不同类型需求(那速度也就有快有慢了,当然也可以考虑分布式架构实现速度提升)。有这方面需求或兴趣的童鞋可以加Q群(581425491)一起讨论学习。下面就简单的介绍下这个接口的使用方法:
1 可以到网站上体验一下整个采集流程:
http://120.79.247.23/f12b
2 也可以通过http接口(ajax)(当然你将链接拼好了放浏览器里一样能得到执行结果)
1)发送指令
<script> $.ajax({ type : "get", async:false, url:"http://120.79.247.23/f12b", data:{ cmd:'api_putACommand', url:'www.weibo.com', //需要采集的链接 wait:'5000' //因为js加载需要时间,所以需要等待一定秒数,这个数值可根据实际情况设置 }, dataType: 'jsonp', //这里使用jsonp解决跨域问题 jsonp:"jsonpCallback", success: function(data) { if(data.status==200){ //status=200时表明执行正常 返回一个id,此id是后续查询采集进度的唯一标识 alert(data.commandID); }else{ //status!=200则表明执行有问题 alert(data.msg); } }, error:function(XMLHttpRequest, textStatus, errorThrown){ var errorMsg = textStatus+"("+XMLHttpRequest.status+")"; alert(errorMsg); return false; } }); </script><br /><br />正常返回值:<br /> {"status":"200","commandID":17}<br /> //status: 处理状态,200是正常,-1是异常<br /> //commandID: 任务ID,需要保存起来后面查询要用<br />其他返回值:<br /> {"status":"-1","msg":"参数不能为空"}<br /> {"status":"-1","msg":"保存至数据库失败"}<br /> {"status":"-1","msg":"null"}
2)查询指令执行情况
<script> $.ajax({ type : "get", async:false, url:"http://120.79.24.23/f12b", data:{ cmd:'api_quaryACommand', commandID:17, //前面返回给你的ID }, dataType: 'jsonp', jsonp:"jsonpCallback", success: function(data) { if(data.status==200){ //status=200时表明查询成功<br /> if(data.commandStatus=="create"){<br /> //表明此指令已被服务端接受,但还未开始执行(通常是因为在排队)<br /> }else if(data.commandStatus=="start"){<br /> //表明此指令已开始执行<br /> }else if(data.commandStatus=="success"){<br /> //指令执行完成,会返回一个fileID,链接经js解析后的html代码就存放在这个文件里<br /> alert(data.fileID);<br /> } }else{ //status!=200则表明查询有问题 alert(data.msg); } }, error:function(XMLHttpRequest, textStatus, errorThrown){ var errorMsg = textStatus+"("+XMLHttpRequest.status+")"; alert(errorMsg); return false; } }); </script><br /><br />//正常返回值:<br /> 任务已创建正在等待执行:{"status":"200","commandStatus":"create"}<br /> 任务已开始执行:{"status":"200","commandStatus":"start"}<br /> 任务执行完成:{"status":"200","commandStatus":"success","fileID":"18"}<br />//其他返回值:<br /> {"status":"-1","msg":"参数不能为空"}<br /> {"status":"-1","msg":"数据库链接失败"}<br /> {"status":"-1","msg":"数据库查询失败"}<br /> {"status":"-1","msg":"找不到commandID"}<br /> {"status":"-1","msg":"null"}
3)得到执行结果(html文件内容)
<script> $.ajax({ type : "get", async:false, url:"http://120.79.247.23/f12b", data:{ cmd:'api_getAFileContent', fileID:'18' //上一步提供给你的文件id }, dataType: 'jsonp', jsonp:"jsonpCallback", success: function(data) { if(data.status==200){ //status=200时表明执行正常,直接将html文件的内容返回给你 alert(data.fileContent); }else{ //status!=200则表明执行有问题 alert(data.msg); } }, error:function(XMLHttpRequest, textStatus, errorThrown){ var errorMsg = textStatus+"("+XMLHttpRequest.status+")"; alert(errorMsg); return false; } }); </script><br /><br />//正常返回值<br /> {"status":"200","fileContent":"xx"}<br />//其他返回值<br /> {"status":"-1","msg":"null"}
参考:
https://www.cnblogs.com/dream0530/p/6179819.html
相关推荐
88274956 2020-11-03
runner 2020-09-01
梦的天空 2020-08-25
移动开发与培训 2020-08-16
ReunionIsland 2020-08-16
lyqdanang 2020-08-16
MyNameIsXiaoLai 2020-07-08
星辰的笔记 2020-07-04
csstpeixun 2020-06-28
letheashura 2020-06-26
liaoxuewu 2020-06-26
sunzhihaofuture 2020-06-21
FEvivi 2020-06-16
坚持着执着 2020-06-16
waterv 2020-06-14
xiaoge00 2020-06-14
firejq 2020-06-14
firstboy0 2020-06-14
e度空间 2020-06-12
zhongweinan 2020-06-10