From 59aa28d2878373e35b55fdeb125baa1fe86c82ae Mon Sep 17 00:00:00 2001 From: zhuweiyou Date: Mon, 19 Feb 2018 15:54:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=B4=E8=84=91=E7=8E=8B=E8=80=85=E8=BD=AC?= =?UTF-8?q?=E7=A7=BB=E5=88=B0=E7=9F=A5=E4=B9=8E=E7=AD=94=E9=A2=98=E7=8E=8B?= =?UTF-8?q?=EF=BC=8Canyproxy=20=E5=A2=9E=E5=8A=A0=20wss=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md" | 57 +------------------ .../README.md" | 57 ++++++++++++++++++- .../package.json" | 4 +- .../quizzes.json" | 0 .../src/common/mongo.js" | 2 +- .../src/common/quiz-model.js" | 0 .../src/common/sleep.js" | 0 .../src/common/zhdtw.js" | 4 +- .../src/crawl.js" | 4 +- .../src/robot.js" | 10 +--- 10 files changed, 67 insertions(+), 71 deletions(-) rename "\345\244\264\350\204\221\347\216\213\350\200\205/package.json" => "\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/package.json" (56%) rename "\345\244\264\350\204\221\347\216\213\350\200\205/quizzes.json" => "\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/quizzes.json" (100%) rename "\345\244\264\350\204\221\347\216\213\350\200\205/src/database/mongo.js" => "\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/common/mongo.js" (78%) rename "\345\244\264\350\204\221\347\216\213\350\200\205/src/database/quiz-model.js" => "\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/common/quiz-model.js" (100%) rename "\345\244\264\350\204\221\347\216\213\350\200\205/src/common/sleep.js" => "\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/common/sleep.js" (100%) rename "\345\244\264\350\204\221\347\216\213\350\200\205/src/common/tnwz.js" => "\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/common/zhdtw.js" (98%) rename "\345\244\264\350\204\221\347\216\213\350\200\205/src/crawl.js" => "\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/crawl.js" (58%) rename "\345\244\264\350\204\221\347\216\213\350\200\205/src/robot.js" => "\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/robot.js" (84%) diff --git "a/\345\244\264\350\204\221\347\216\213\350\200\205/README.md" "b/\345\244\264\350\204\221\347\216\213\350\200\205/README.md" index 8c49465..366c830 100644 --- "a/\345\244\264\350\204\221\347\216\213\350\200\205/README.md" +++ "b/\345\244\264\350\204\221\347\216\213\350\200\205/README.md" @@ -1,58 +1,3 @@ # 头脑王者 -爬取题库、答题辅助 - -## 准备 - -- Node.js 9.x 以上 -- MongoDB -- 安装依赖 `npm i` - -## 功能 - -### 爬取题库 - -> 爬题思路:不断进行好友对战获取题目,随意提交答案会返回正确答案,存入数据库,重复的忽略 - -分别使用两个微信号登录游戏,抓登录的请求,复制返回的 `uid` 和 `token` - -填入 [src/crawl.js](src/crawl.js) 中,执行 `npm run crawl` 开始自动爬取 - -如果出现 “上局异常退出,请重新登录” 的提示,先退出爬题脚本,用第一个微信号**完全退出游戏进程**,重新进入游戏,再重新爬即可 - -爬题需要一定的时间,也可以直接导入[我爬好的题库 MongoShell BSON(.json)](quizzes.json)(近 1.7w 题)数据库名为 `tnwz` - -导入命令,注意你的文件路径 - -```bash -mongoimport -d tnwz -c quizzes --file ~/Downloads/quizzes.json --jsonArray --drop -``` - -### 答题辅助 - -执行 `npm run ca` 生成 RootCA,将生成的证书安装到手机上,并在手机上设置代理 IP(电脑的局域网 IP) 和 端口(8001) - -证书配置遇到困难可以看[这里](http://anyproxy.io/cn/#%E8%AF%81%E4%B9%A6%E9%85%8D%E7%BD%AE) - -一切都配置好之后,**完全退出游戏进程**,执行 `npm run robot`,再重新进入游戏 - -答题时,如果该题在题库中,终端会输出正确答案,手机上正确答案前面会显示一个 `√` - -如果本题不在题库里,会自动打开百度搜索答案,并将本题正确答案记录到题库中 - -## 截图 - - - - - - -
- 王者截图 - - 辅助截图 -
- -![爬取截图](https://user-images.githubusercontent.com/8413791/35079048-36290192-fc40-11e7-9514-036e786dbe5d.png) - -![题库截图](https://user-images.githubusercontent.com/8413791/35079110-7303a0a4-fc40-11e7-9e09-1b67415d8855.png) +“头脑王者” 小程序违规被封,已改名为 [知乎答题王](../知乎答题王) diff --git "a/\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/README.md" "b/\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/README.md" index 377d13b..0227b84 100644 --- "a/\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/README.md" +++ "b/\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/README.md" @@ -1,3 +1,58 @@ # 知乎答题王 -由于头脑王者违规被封,改名为知乎答题王,所以目前直接使用 [头脑王者](../头脑王者) 的辅助即可 +爬取题库、答题辅助 + +## 准备 + +- Node.js 9.x 以上 +- MongoDB +- 安装依赖 `npm i` + +## 功能 + +### 爬取题库 + +> 爬题思路:不断进行好友对战获取题目,随意提交答案会返回正确答案,存入数据库,重复的忽略 + +分别使用两个微信号登录游戏,抓登录的请求,复制返回的 `uid` 和 `token` + +填入 [src/crawl.js](src/crawl.js) 中,执行 `npm run crawl` 开始自动爬取 + +如果出现 “上局异常退出,请重新登录” 的提示,先退出爬题脚本,用第一个微信号**完全退出游戏进程**,重新进入游戏,再重新爬即可 + +爬题需要一定的时间,也可以直接导入[我爬好的题库 MongoShell BSON(.json)](quizzes.json)(近 1.7w 题)数据库名为 `zhdtw` + +导入命令,注意你的文件路径 + +```bash +mongoimport -d zhdtw -c quizzes --file ~/Downloads/quizzes.json --jsonArray --drop +``` + +### 答题辅助 + +执行 `npm run ca` 生成 RootCA,将生成的证书安装到手机上,并在手机上设置代理 IP(电脑的局域网 IP) 和 端口(8001) + +证书配置遇到困难可以看[这里](http://anyproxy.io/cn/#%E8%AF%81%E4%B9%A6%E9%85%8D%E7%BD%AE) + +一切都配置好之后,**完全退出游戏进程**,执行 `npm run robot`,再重新进入游戏 + +答题时,如果该题在题库中,终端会输出正确答案,手机上正确答案前面会显示一个 `√` + +如果本题不在题库里,会自动打开百度搜索答案,并将本题正确答案记录到题库中 + +## 截图 + + + + + + +
+ 王者截图 + + 辅助截图 +
+ +![爬取截图](https://user-images.githubusercontent.com/8413791/35079048-36290192-fc40-11e7-9514-036e786dbe5d.png) + +![题库截图](https://user-images.githubusercontent.com/8413791/36367267-dbb177ce-158c-11e8-8c82-2eae80263a43.png) diff --git "a/\345\244\264\350\204\221\347\216\213\350\200\205/package.json" "b/\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/package.json" similarity index 56% rename from "\345\244\264\350\204\221\347\216\213\350\200\205/package.json" rename to "\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/package.json" index e3272de..b392ae0 100644 --- "a/\345\244\264\350\204\221\347\216\213\350\200\205/package.json" +++ "b/\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/package.json" @@ -2,10 +2,10 @@ "scripts": { "ca": "anyproxy-ca", "crawl": "node src/crawl.js", - "robot": "anyproxy --intercept --ignore-unauthorized-ssl --rule=src/robot.js" + "robot": "anyproxy --intercept --ignore-unauthorized-ssl --ws-intercept --rule=src/robot.js" }, "dependencies": { - "anyproxy": "^4.0.4", + "anyproxy": "^4.0.6", "axios": "^0.17.1", "mongoose": "^4.13.9" } diff --git "a/\345\244\264\350\204\221\347\216\213\350\200\205/quizzes.json" "b/\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/quizzes.json" similarity index 100% rename from "\345\244\264\350\204\221\347\216\213\350\200\205/quizzes.json" rename to "\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/quizzes.json" diff --git "a/\345\244\264\350\204\221\347\216\213\350\200\205/src/database/mongo.js" "b/\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/common/mongo.js" similarity index 78% rename from "\345\244\264\350\204\221\347\216\213\350\200\205/src/database/mongo.js" rename to "\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/common/mongo.js" index 4effb70..80c0984 100644 --- "a/\345\244\264\350\204\221\347\216\213\350\200\205/src/database/mongo.js" +++ "b/\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/common/mongo.js" @@ -1,6 +1,6 @@ const mongoose = require('mongoose') -const db = mongoose.connect('mongodb://localhost/tnwz', { +const db = mongoose.connect('mongodb://localhost/zhdtw', { useMongoClient: true, autoReconnect: true }) diff --git "a/\345\244\264\350\204\221\347\216\213\350\200\205/src/database/quiz-model.js" "b/\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/common/quiz-model.js" similarity index 100% rename from "\345\244\264\350\204\221\347\216\213\350\200\205/src/database/quiz-model.js" rename to "\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/common/quiz-model.js" diff --git "a/\345\244\264\350\204\221\347\216\213\350\200\205/src/common/sleep.js" "b/\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/common/sleep.js" similarity index 100% rename from "\345\244\264\350\204\221\347\216\213\350\200\205/src/common/sleep.js" rename to "\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/common/sleep.js" diff --git "a/\345\244\264\350\204\221\347\216\213\350\200\205/src/common/tnwz.js" "b/\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/common/zhdtw.js" similarity index 98% rename from "\345\244\264\350\204\221\347\216\213\350\200\205/src/common/tnwz.js" rename to "\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/common/zhdtw.js" index 4c33857..1b21037 100644 --- "a/\345\244\264\350\204\221\347\216\213\350\200\205/src/common/tnwz.js" +++ "b/\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/common/zhdtw.js" @@ -2,8 +2,8 @@ const crypto = require('crypto') const axios = require('axios') const querystring = require('querystring') const sleep = require('./sleep') -require('../database/mongo') -const QuizModel = require('../database/quiz-model') +require('./mongo') +const QuizModel = require('./quiz-model') const request = axios.create({ baseURL: 'https://question.hortor.net/', diff --git "a/\345\244\264\350\204\221\347\216\213\350\200\205/src/crawl.js" "b/\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/crawl.js" similarity index 58% rename from "\345\244\264\350\204\221\347\216\213\350\200\205/src/crawl.js" rename to "\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/crawl.js" index 7a0195d..d2c0922 100644 --- "a/\345\244\264\350\204\221\347\216\213\350\200\205/src/crawl.js" +++ "b/\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/crawl.js" @@ -1,6 +1,6 @@ -const Tnwz = require('./common/tnwz') +const Zhdtw = require('./common/zhdtw') -Tnwz.crawl([ +Zhdtw.crawl([ { uid: '', token: '' diff --git "a/\345\244\264\350\204\221\347\216\213\350\200\205/src/robot.js" "b/\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/robot.js" similarity index 84% rename from "\345\244\264\350\204\221\347\216\213\350\200\205/src/robot.js" rename to "\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/robot.js" index 9567592..72a0f82 100644 --- "a/\345\244\264\350\204\221\347\216\213\350\200\205/src/robot.js" +++ "b/\347\237\245\344\271\216\347\255\224\351\242\230\347\216\213/src/robot.js" @@ -1,13 +1,9 @@ const exec = require('child_process').exec -const Tnwz = require('./common/tnwz') -const QuizModel = require('./database/quiz-model') +const Zhdtw = require('./common/zhdtw') +const QuizModel = require('./common/quiz-model') // AnyProxy 只支持 yield 语法,暂不支持 await module.exports = { - * beforeDealHttpsRequest (requestDetail) { - return ['question.hortor.net', 'question-zh.hortor.net'] - .some(domain => requestDetail.host.indexOf(domain) !== -1) - }, * beforeSendRequest (requestDetail) { // 原先采用的是改数据发送,经测试发现会频繁的提示需要重新登录,所以改为只提示答案了 }, @@ -25,7 +21,7 @@ module.exports = { // 从题库里找答案 this._quiz = yield QuizModel.findOne({quiz: this._findQuiz.quiz}) if (this._quiz) { - const answer = Tnwz.transformAnswer(this._quiz, this._findQuiz) - 1 + const answer = Zhdtw.transformAnswer(this._quiz, this._findQuiz) - 1 const option = this._findQuiz.options[answer] this._findQuiz.options[answer] = '√ ' + option body.data = this._findQuiz