auto_xuexiqiangguo icon indicating copy to clipboard operation
auto_xuexiqiangguo copied to clipboard

答题时,在线搜索卡住了

Open shoarh opened this issue 2 years ago • 6 comments

答题时,在线搜索网站 (https://www.souwen123.com/search/select.php?age= ) 打不开了,一直在等待响应,卡住了

shoarh avatar Sep 01 '22 13:09 shoarh

答题时,在线搜索网站 (https://www.souwen123.com/search/select.php?age= ) 打不开了,一直在等待响应,卡住了

应该是网站https://www.souwen123.com/search/select.php挂了吧 我的解决方法:直接注释,凑合用。 问题是,错误率高了

// 如果第一个网站没获取到正确答案,则利用第二个网站
//         if (!(result && result[0].charCodeAt(3) > 64 && result[0].charCodeAt(3) < 69)) {
//             try {
//                 // 此网站只支持六个字符的搜索
//                 var r2 = http.get("https://www.souwen123.com/search/select.php?age=" + encodeURI(question.slice(0, 6)));
//                 result = r2.body.string().match(/答案:.*</);
//             } catch (error) { }
//         }

Xu22Web avatar Sep 01 '22 15:09 Xu22Web

另外,找到俩答题接口

请求 URL: https://www.hysgn.com/e/search/index.php 请求类型:application/x-www-form-urlencoded 请求方法: POST 请求体示例:

keyboard: "题目问题",
show: "title",
tempid: 1,
tbname: "news"

还有一个和已有的www.syiban.com很相似

请求 URL: https://www.taery.cn/search/index/init.html 请求方法: GET 请求参数示例:

modelid: 1,
q: "题目问题"

小建议:有条件的话,可以自己做一个API,组合网上的答题接口,统一返回。如果某个接口出问题,请求超时或其他错误,就不需要更新脚本代码了

Xu22Web avatar Sep 01 '22 15:09 Xu22Web

答题时,在线搜索网站 (https://www.souwen123.com/search/select.php?age= ) 打不开了,一直在等待响应,卡住了

应该是网站https://www.souwen123.com/search/select.php挂了吧 我的解决方法:直接注释,凑合用。 问题是,错误率高了

// 如果第一个网站没获取到正确答案,则利用第二个网站
//         if (!(result && result[0].charCodeAt(3) > 64 && result[0].charCodeAt(3) < 69)) {
//             try {
//                 // 此网站只支持六个字符的搜索
//                 var r2 = http.get("https://www.souwen123.com/search/select.php?age=" + encodeURI(question.slice(0, 6)));
//                 result = r2.body.string().match(/答案:.*</);
//             } catch (error) { }
//         }

================ 调试发现 以下代码

if (result) { // 答案文本 var result = result[0].slice(5, result[0].indexOf("<")); log("答案: " + result); select_option(result, depth_click_option, options_text); }

在处理匹配到答案的字符串时, result[0].slice(5, result[0].indexOf("<")) 改成 result[0].slice(result[0].indexOf("、")+1, result[0].indexOf("<")) 会提高些正确率。(答案后的文本有的从第6个索引位置开始)

shoarh avatar Sep 01 '22 16:09 shoarh

这个还是保持原代码吧,在线题库少量答案没有“、”,顿号不影响选择正确答案的。

另, 谢谢,终于找到卡着的原因了,我目前是如下修改的,六个字符的搜索 解决如题目开头嫦娥识别成娟娥、根据《书名号在线搜不到等类似的问题 4a9aac92bf71c53679c67c77056c148c515c3be9 截掉一部分,再在syiban.com上搜索一遍

已提交PR https://github.com/dundunnp/auto_xuexiqiangguo/pull/485

McMug2020 avatar Sep 01 '22 16:09 McMug2020

我之前调用过这个接口,之前这样写,可惜Auto.js古老,新正则语法不支持,懒得改,看着玩玩

用法(非node):访问这个网址http://www.syiban.com/,再浏览器调试调用getAnswer(题目内容)

const getAnswer = async (question) => {
  question = question.slice(0, 6);
  const res = await fetch(
    `http://www.syiban.com/search/index/init.html?modelid=1&q=${question}`,
    { method: 'GET', mode: 'cors' }
  ).then((res) => res.text());
  const answerList =
    res.match(/(?<=答案:.*[A-Z][.、:])[^<]+/g) ||
    res.match(/(?<=答案:.*)[^<A-Z]+/g);
  let answers = [];
  if (answerList && answerList.length) {
    // 答案文本
    const answerText = answerList[0];
    // 答案
    answers = answerText.split(/[,,][A-Z][.、:]/).map((ans) => ans.trim());
  }
  console.log(answers);
};

Xu22Web avatar Sep 01 '22 16:09 Xu22Web

我感觉在线搜索第一个网站(www.syiban.com)对于有些顿好、逗号的字符,对于用get方式查询匹配不到搜索结果,相反,用post却可以

这个还是保持原代码吧,在线题库少量答案没有“、”,顿号不影响选择正确答案的。

另, 谢谢,终于找到卡着的原因了,我目前是如下修改的,六个字符的搜索 解决如题目开头嫦娥识别成娟娥、根据《书名号在线搜不到等类似的问题 4a9aac9 截掉一部分,再在syiban.com上搜索一遍

已提交PR #485

shoarh avatar Sep 01 '22 22:09 shoarh