认识众多玩家高手/拆客/DIYer,查阅更多资源,一起学习技术知识
您需要 登录 才可以下载或查看,没有帐号?立即注册
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();
}
});
}
}