js 获取td里面的所有id_js自动答题插件

大学里,总有一些老师让做的力所能及的事情,打扰我们的休息时间。在线答题就是一个,给个题库,还得弄到多少分以上才能通过。

回忆起上次的答题,懒惰的我做了个插件,做插件不费劲么?没办法,谁让我懒呢。。

那是一次宗教的答题,,100道题,给了个题库,让我们答,分数不够的,重新弄,反正是没限制。于是我来了精神。

给了个题库,这样的:

42d7a939e8ed2d525b6b94d05ba4f99a.png

所以,首先要把答案给捋下来,弄成json,便于查询。

原理就是python 操作excel,用 xlrd库,将题目和答案搞出来:

# -*- coding: UTF-8 -*-import xlrdfrom collections import OrderedDictimport jsonimport codecsxlrd.Book.encoding = 'utf-8'wb = xlrd.open_workbook('zjzs.xlsx')convert_list = []sh = wb.sheet_by_index(0)title = sh.row_values(0)for rownum in range(1, sh.nrows):   # 从1到284行    rowvalue = sh.row_values(rownum)  # 读取一行    single = OrderedDict()    print rowvalue[1], rowvalue[2], rowvalue[7]    single["name"] = rowvalue[2]    single["value"] = rowvalue[7]    # for colnum in range(0, len(rowvalue)):    #     print(title[colnum], rowvalue[colnum])#         single[title[colnum]] = rowvalue[colnum]    convert_list.append(single)#j = json.dumps(convert_list)print jwith codecs.open('file.json', "w", "utf-8") as f:    f.write(j)

最终得出一坨json。

然后,看一看界面:

b19939f4bf8a3bedcf895799af06a84c.png

也就是,我需要获取到tr标签里面的题目,然后将题目与题库里的东西比对,得出此题的正确答案。然后,可以根据查询得到的答案自动选择相应的答案。

不多说,开始实施。

自己编写浏览器插件,看看360给的api:       http://open.chrome.360.cn/extension_dev/notifications.html

也就是最最基础也是两个文件,一个清单文件,一个执行文件。

先写个demo吧:


浏览器插件demo:

  1. manifes.json

  "name": "demo",               //插件名字  "description": "demo", //描述  "version": "2.0",  "permissions": [  "activeTab"           //权限:一般写tabs,或者activetab,应该是上下文之类的  ],  "background": {  //后台执行的程序  "scripts": ["background.js"],  "persistent": false  },  "browser_action": {  "default_title": "demo"  },  "manifest_version": 2}

background.js

chrome.browserAction.onClicked.addListener(function(tab) {  // 谷歌api,插件被点击监听  //tab执行脚本,通过文件能执行多条语句。   chrome.tabs.executeScript({file: "content.js"});//通过JS文件});

    3. content.js

//这里面写测试东西,比如:alert(1);

然后浏览器用开发人员选项,将插件导入,点击插件,弹出弹框之后,说明可以用。开始弄我的答题脚本:

// 这里字符串一大堆,name  value型的var jsonText = '[{"name": "\u4e0b\u5217\uff08  \uff09\u4e0d\u662f\u793e\u4f1a\u4e3b\u4e49\u6838\u5fc3\u4ef7\u503c\u89c2\u7684\u5185\u5bb9\u3002", "value": "D"}, {"name": "\u4e0b\u5217\u4e0d\u5c5e\u4e8e\u201c\u4e94\u7231\u201d\u7684\u57fa\u672c\u5185\u5bb9\u7684\u662f\uff08  \uff09\u3002", "value": "A"}, {"name": "\u300a\u5baa\u6cd5\u300b\u7b2c\u4e09\u5341\u516d\u6761\u89c4\u5b9a\uff0c\u4e2d\u534e\u4eba\u6c11\u5171\u548c\u56fd\u516c\u6c11\u6709\u5b97\u6559\u4fe1\u4ef0\u81ea\u7531\uff0c\u4efb\u4f55\u56fd\u5bb6\u673a\u5173\u3001\u793e\u4f1a\u56e2\u4f53\u548c\uff08  \uff09\u4e0d\u5f97\u5f3a\u5236\u516c\u6c11\u4fe1\u4ef0\u5b97\u6559\u6216\u8005\u4e0d\u4fe1\u4ef0\u5b97\u6559,\u4e0d\u5f97\u6b67\u89c6\u4fe1\u4ef0\u5b97\u6559\u7684\u516c\u6c11\u548c\u4e0d\u4fe1\u4ef0\u5b97\u6559\u7684\u516c\u6c11\u3002", "value": "C"}]';var jsonObj = JSON.parse(jsonText);var tbody = document.getElementsByTagName("tbody")[0];// 获取tr节点var timu = tbody.getElementsByTagName("tr");// 获取下一个节点function getNextNode(ele) {    return ele.nextElementSibling || ele.nextSibling;}// 往后面几个节点选中 value是答案, i是tbody的第几个trfunction daanwanghoumian(value,i) {    if (value == "正确"){        timu[i+1].getElementsByTagName("input")[0].checked = true;    }else if (value == "错误"){        timu[i+2].getElementsByTagName("input")[0].checked = true;    }else {        if (value.indexOf("A")!= -1){            timu[i+1].getElementsByTagName("input")[0].checked = true;        }        if (value.indexOf("B")!= -1){            timu[i+2].getElementsByTagName("input")[0].checked = true;        }        if (value.indexOf("C")!= -1){            timu[i+3].getElementsByTagName("input")[0].checked = true;        }        if (value.indexOf("D")!= -1){            timu[i+4].getElementsByTagName("input")[0].checked = true;        }    }}for (let i = 0; i < timu.length; i++) {    // 获取所有的tr, 得到题目,id带topicid的,是题目,其他是内容    if (timu[i].id.indexOf("topicid") != -1){        var bioati = timu[i].getElementsByTagName("font")[0].innerText.split("、")[1].replace(/(^\s+)|(\s+$)/g,"");        if (bioati.indexOf("( )") != -1){            var a = bioati.split("( )");            bioati = a[0].length > a[1].length ? a[0] : a[1];        }        for (let j = 0; j < jsonObj.length; j++) {            if (jsonObj[j].name.indexOf(bioati) != -1){                timu[i].getElementsByTagName("font")[0].innerText =                    timu[i].getElementsByTagName("font")[0].innerText + "   "                    + jsonObj[j].value + "|||";                daanwanghoumian(jsonObj[j].value,i);                break;            }        }    }}// 对下面的全选, 时间更改var lix = document.getElementsByClassName("bd")[0].getElementsByTagName("ul")[0].getElementsByTagName("li");for (let i = 0; i < lix.length; i++) {    lix[i].classList.add("on");}document.getElementById("countdown_time").id = 'bb';document.getElementById("bb").innerText = "考试还有15分33秒";

基本代码是从33行到51行,也就是tbody里面一堆的tr,td标签,通过循环,获取tr标签里的题目,然后截取一段,因为有的题目长,总不能全部都拿来比较,万一有不同的呢,比较之后(jsonObj[j].name.indexOf(bioati) != -1),将答案写到题目后面,并通过 daanwanghoumian 函数,自动点击正确的答案。

至于后面那点,修改考试时间,无关紧要了,毕竟,用插件挺快的,学校还要截图。。

点关注,不迷路

7676681683fae595c8a64491b928e91b.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值