autojs爬取单词

// 开始运行
sleep(1000);
if (currentPackage() != "cn.com.langeasy.LangEasyLexis") {
	launch("cn.com.langeasy.LangEasyLexis");
}
console.show();
// ===================分隔符===================
id('ll_learn_band').click() && log("点击->Learn")
	log("DDDD")
textContains("美").waitFor()
	log("CCCC")
sleep(200)

	log("BBBB")
// 考义词汇
var optList = id('ll_isknow').findOne(500)
if (optList != null && optList.childCount() == 2) {	log("BBAA")

	id('tv_know').findOne().click() && log("点击->认识")
}
// id('tv_unknow').click() && log("点击->看答案")
// id('tv_lookupExample').click() && log("点击->原生例句")

	log("AAAA")
// 爬取
	log("0000")
var wordTxt = id('tv_acceptation').findOne().text()
var character = ""
var wordIdx = 0
while (true) {
	var continueBtn = id('left_button').findOne(500)
	if (continueBtn != null) {
		sleep(300)
		continueBtn.click() && log("点击->再来一组")
	}

	// 保存例句
	log(1111)
	var word = {}
	word.word = id('tv_word').findOne().text()
	log(2222)
	var pronTv = id('prononce_display').findOne(500)
	log(3333)
	word.pron = pronTv != null ? pronTv.text() : ""
	log(4444)
	// 判断是否为生词
	var wordOpt = id('rl_learn_option').findOne()
	log(5555)
	var collection = wordOpt.findByText('看答案')
	log(6666)
	var isNew = collection != null && collection.size() > 0 
	log(7777)
	if (isNew) {
	log(8888)
		var showDict = id('iv_show_dict').findOne(500)
	log(9999)
		if (showDict != null) {
			showDict.click() && log("点击->打开字典")
			textContains("在历年真题中出现").waitFor()
			word.frequency = textMatches("^\\d+").find().reverse()[0].text()
			id('close_button').findOne().click()
			textContains("美").waitFor()
		}
		swipe(216, 1230, 864, 1230, 100) && log("侧滑->看词缀")
		var affix = id('type_content').findOne(500)
		if (affix != null) {
			word.affix = affix.text()
			swipe(864, 1230, 216, 1230, 100) && log("侧滑->退出例句")
		}
		wordIdx = 0
		textContains("美").waitFor()
		swipe(864, 930, 216, 930, 100) && log("侧滑->看例句")
	} else {
		// 第二次答题
		var iKnow = id('tv_know').findOne(500)
		if (iKnow != null) {
			iKnow.click() && log("点击->认识")
			continue
		}
	}

	var isKey = id('interpret_type').textContains('扩展词义').find().size() < 2
	if (isKey) {
		sleep(200)
		log('考义单词')
		word.mean = id('tv_acceptation').findOne().text()
		let lastEn
		for (var i = 1; i <= 3; i++) {
			try {
				var exKey = "example" + i
				var exEn = id('en_sentence').find().get(i).text()
				// 若为相同例句则退出循环
				if (exEn != null && exEn == lastEn) {
					log("当前例句重复 退出遍历")
					break
				}
				word[exKey + "_en"] = exEn
				word[exKey + "_cn"] = id('ch_sentence').find().get(i).text() +
					"--- (" + id('s_book_title').find().get(i).text() + ")"
			} catch (err) {
				log("err" + err)
			}
			lastEn = exEn
			var scrollAble = id('sentence_vp').findOne().scrollForward()
			if(!scrollAble) break;
			sleep(500)
		}
		// 这里我用了一个接口去存储 是写入mysql数据库的 你们可以自己实现
		/*
		参数示例
		{
		    "word": "word2",
		    "mean": "mean2",
		    "pron": "pron2",
		    "frequency": 22,
		    "example1_en": "example1_en2",
		    "example1_cn": "example1_cn2",
		    "example2_en": "example2_en2",
		    "example2_cn": "example2_cn2",
		    "example3_en": "example3_en2",
		    "example3_cn": "example3_cn2"
		}
		*/
		var url = "http://xxx.xxx/api/meaning";
		// log(word)
		r = http.postJson(url, word);
		toastLog(r.body.string());
	} else {
		log('非考义单词')
	}

	// 判断是否最后一个词义
	var pageIndex = id('page_index').find().reverse()[0].text()
	var arr = pageIndex.split('/')

	// 保存第一个中文 用于答题
	if (wordIdx == 0) {
		var firstMean = id('tv_acceptation').findOne().text().replace(/\(.*\)/g, '').replace(/(.*)/g, '').replace(/[|;|,]/g, '')
		var index = escape(firstMean).indexOf("%u");
		character = escape(firstMean).substring(index, index + 6);
		character = unescape(character)
		log("character:" + character)
		log("firstMean:" + firstMean)
	}

	// 非考义 OR 最后一页 则收起卡片 
	if (!isKey || arr[0] == arr[1]) {
		textContains("美").waitFor()
		// 收起例句卡片
		log('当前为最后一页')
		var lookupExample = id('tv_lookupExample').findOne(500)
		if (lookupExample != null) {
			lookupExample.click() && log("点击->收起卡片")
		}

		// 移除单词
		var removeWord = id('iv_del').findOne(500)
		if (removeWord != null) {
			removeWord.click() && log("点击->移除单词")
		}

	} else {
		wordIdx++;
		id('detail_card_view').findOne().scrollForward() && log("滑动->下一词义")
	}
}

// ===================分隔符===================
// 结束
sleep(500);
exit();
log("难道脚本还没停止吗?");
CREATE TABLE `bubei_meaning` (
  `word` varchar(64) NOT NULL COMMENT '单词',
  `mean` varchar(64) NOT NULL COMMENT '意思',
  `pron` varchar(64) NOT NULL COMMENT '音标',
  `frequency` int NOT NULL DEFAULT '0' COMMENT '词频',
  `example1_en` varchar(255) NOT NULL,
  `example1_cn` varchar(255) NOT NULL,
  `example2_en` varchar(255) NOT NULL,
  `example2_cn` varchar(255) NOT NULL,
  `example3_en` varchar(255) NOT NULL,
  `example3_cn` varchar(255) NOT NULL,
  PRIMARY KEY (`word`,`mean`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Categories:

Tags: