直接在Chrome里抓取数据

一个小测试发现可以自动做题,于是想通过脚本的方式看能不能获取相应的题库,刚好可以学习一下JS异步操作。花了一天时间,总算跑顺利了,遇到了不少坑。记录下来分享。

1、JS如何顺序执行

JS有强大的异步操作机制,但由于之前顺序执行的思路受限,直接用For循环的话会把请求结果的顺序搞乱。因此需要让JS在异步的基础上还能够顺序执行,基本的办法是采用Callback的方式。同时为了避免JS在页面的DOM进行操作过程中出现DOM不存在的情况使用SetTimeout来延时执行(这个地方费了了小半天时间)。

注意由于程序代码中有使用$.ajax请求,因此把回调的语句放到$ajax请求的Success方法里。

基本代码结构代码如下:

复制代码
var i = 0;
var loopCall = function(count) {
    callProcess(i, function() {
        i++;
        if (i < count) {
            loopCall(count);
        }
    });
};

function callProcess(i, callback) {
    console.log('running on: ' + i.toString());

    //process code
    //...
    //...
    
    //使用setTimeout延时,避免DOM操作错误
    setTimeout(function(){callback();},100);
}

loopCall(1000);
复制代码

 

2.数据怎么存储

之前只知道有LocalStorage,开发过程中Google了一下才知道有WebSQL,语法和操作也挺简单,也尝试过使用数组变量来存储数据,但发现变量数据大于150K左右的时候浏览器就很慢。因此使用WebSQL来存储

复制代码
var db = openDatabase(' mydatabase ', '2.0', 'my db', 2 * 1024); 
   db.transaction(function (tx) {   
     tx.executeSql('CREATE TABLE IF NOT EXISTS t1 (id unique, log)'); 
     tx.executeSql('INSERT INTO t1  
                           (id,log) VALUES (?, ?'), [e_id, e_log];  //e_id和e_log是外部变量
   }); 
复制代码

 

总结

其他处理代码基本就是原来的页面代码拷贝过来修改修改另加一定的调试。之前想用JS来写一直没有找到场景,现在用了虽然遇到点问题但总算是克服过了。不过JS在异步调用想处理成同步的多层嵌套之后还是需要好好规划一下,虽然在ES6之后增加了Promise类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值