android获取js数组,JavaScript JS脚本问题求助,关于自动答题脚本数组的提取和处理(Auto.JS安卓)...

认识众多玩家高手/拆客/DIYer,查阅更多资源,一起学习技术知识

您需要 登录 才可以下载或查看,没有帐号?立即注册

8baaf04eb249b4474178b0078f482447.gif

9ca0cb046ba12e9f7d6500eeea1c766b.png

x

代码见下。现在问题是,填空题部分,根据题库作答时,只能填入第一个字;根据提示作答时,提示提取的只有最后一个字,填入也是最后一个字。

编程小白,只能处理下逻辑判断,数组这种处理不了

/**

* @description: 答题循环

* @param: null

* @return: null

*/

function dailyQuestionLoop() {

if (textStartsWith("填空题").exists()) {

var questionArray = getFitbQuestion();

}

else if (textStartsWith("多选题").exists() || textStartsWith("单选题").exists()) {

var questionArray = getChoiceQuestion();

}

var blankArray = [];

var question = "";

var answer = "";

questionArray.forEach(item => {

if (item != null && item.charAt(0) == "|") { //是空格数

blankArray.push(item.substring(1));

} else { //是题目段

question += item;

}

});

question = question.replace(/\s/g, "");

console.log("题目:" + question);

var ansTiku = getAnswer(question, 'tiku');

if (ansTiku.length == 0) {//tiku表中没有则到tikuNet表中搜索答案

ansTiku = getAnswer(question, 'tikuNet');

}

answer = ansTiku.replace(/(^\s*)|(\s*$)/g, "");

if (text("填空题").exists()) {

if (answer == "") { //答案空,前面题库未找到答案,找提示

var tipsStr = getTipsStr();

answer = getAnswerFromTips(questionArray, tipsStr);

console.info("提示中的答案:" + answer);

if (blankArray.length > 1) {

for (var i = 1; i < blankArray.length; i++) {

setText(i, answer.substr(blankArray[i - 1], blankArray[i]));

}

}else{

setText(0, answer.substr(0, blankArray[0]));

}

} else { //答案非空,题库中已找到答案

console.info("答案:" + answer);

if (blankArray.length > 1) {

for (var i = 1; i < blankArray.length; i++) {

setText(i, answer.substr(blankArray[i - 1], blankArray[i]));

}

}else{

setText(0, answer.substr(0, blankArray[0]));

}

}

}

else if (text("多选题").exists() || text("单选题").exists()) {

if (answer == "") {

var tipsStr = getTipsStr();

answer = clickByTips(tipsStr);

console.info("提示中的答案:" + answer);

checkAndUpdate(question, ansTiku, answer);

} else {

console.info("答案:" + ansTiku);

clickByAnswer(answer);

}

}

delay(0.5);

if (text("确定").exists()) {

text("确定").click();

delay(0.5);

}

else {

console.warn("未找到右上角确定按钮控件,根据坐标点击");

click(device.width * 0.85, device.height * 0.06);//右上角确定按钮,根据自己手机实际修改

console.warn("请手动处理");

delay(5);

}

if (text("下一题").exists()) {

if (text("下一题").exists()) {

text("下一题").click();

delay(0.5);

}

else {

console.warn("请手动处理");

delay(5);

}

}

if (text("完成").exists()) {

if (text("完成").exists()) {

text("完成").click();

delay(0.5);

}

else {

console.warn("请手动处理");

delay(5);

}

}

console.log("-----------------------------------------------------------");

delay(2);

}

/**

* @description: 获取填空题题目数组

* @param: null

* @return: questionArray

*/

function getFitbQuestion() {

var questionCollections = className("EditText").findOnce().parent().parent();

var questionArray = [];

var findBlank = false;

var blankCount = 0;

var blankNumStr = "";

questionCollections.children().forEach(item => {

if (item.className() != "android.widget.EditText") {

if (item.text() != "") {//题目段

if (findBlank) {

blankNumStr = "|" + blankCount.toString();

questionArray.push(blankNumStr);

findBlank = false;

}

questionArray.push(item.text());

}

else {

findBlank = true;

blankCount += 1;

}

}

});

return questionArray;

}

/**

* @description: 获取选择题题目数组

* @param: null

* @return: questionArray

*/

function getChoiceQuestion() {

var questionCollections = className("ListView").findOnce().parent().child(1);

var questionArray = [];

questionArray.push(questionCollections.text());

return questionArray;

}

/**

* @description: 获取提示字符串

* @param: null

* @return: tipsStr

*/

function getTipsStr() {

var tipsStr = "";

while (tipsStr == "") {

if (text("查看提示").exists()) {

var seeTips = text("查看提示").findOnce();

seeTips.click();

delay(1);

click(device.width * 0.5, device.height * 0.41);

delay(1);

click(device.width * 0.5, device.height * 0.35);

} else {

console.error("未找到查看提示");

}

if (text("提示").exists()) {

var tipsLine = text("提示").findOnce().parent();

//获取提示内容

var tipsView = tipsLine.parent().child(1).child(0);

tipsStr = tipsView.text();

//关闭提示

tipsLine.child(1).click();

break;

}

delay(1);

}

return tipsStr;

}

/**

* @description: 从提示中获取填空题答案

* @param: questionArray, tipsStr

* @return: ansTips

*/

function getAnswerFromTips(questionArray, tipsStr) {

var ansTips = "";

for (var i = 1; i < questionArray.length - 1; i++) {

if (questionArray[i].charAt(0) == "|") {

var blankLen = questionArray[i].substring(1);

var indexKey = tipsStr.indexOf(questionArray[i + 1]);

var ansFind = tipsStr.substr(indexKey - blankLen, blankLen);

ansTips += ansFind;

}

}

return ansTips;

}

/**

* @description: 根据提示点击选择题选项

* @param: tipsStr

* @return: clickStr

*/

function clickByTips(tipsStr) {

var clickStr = "";

var isFind = false;

if (className("ListView").exists()) {

var listArray = className("ListView").findOne().children();

listArray.forEach(item => {

var ansStr = item.child(0).child(2).text();

if (tipsStr.indexOf(ansStr) >= 0) {

item.child(0).click();

clickStr += item.child(0).child(1).text().charAt(0);

isFind = true;

}

});

if (!isFind) { //没有找到 点击第一个

listArray[0].child(0).click();

clickStr += listArray[0].child(0).child(1).text().charAt(0);

}

}

return clickStr;

}

/**

* @description: 根据答案点击选择题选项

* @param: answer

* @return: null

*/

function clickByAnswer(answer) {

if (className("ListView").exists()) {

var listArray = className("ListView").findOnce().children();

listArray.forEach(item => {

var listIndexStr = item.child(0).child(1).text().charAt(0);

//单选答案为非ABCD

var listDescStr = item.child(0).child(2).text();

if (answer.indexOf(listIndexStr) >= 0 || answer == listDescStr) {

item.child(0).click();

}

});

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值