摘要:本以為花一兩個(gè)小時(shí)就能搞定這個(gè)微博自動(dòng)轉(zhuǎn)發(fā)的腳本,結(jié)果中途不停的踩坑折騰了大半天。還好早早的被李笑來(lái)老師拉黑。填坑過(guò)程打開瀏覽器中,先登錄自己的微博,再進(jìn)入李笑來(lái)老師的微博首頁(yè)。然后手動(dòng)轉(zhuǎn)發(fā)一次微博,獲取到轉(zhuǎn)發(fā)時(shí)所產(chǎn)生的請(qǐng)求。
故事的背景如下圖,李笑來(lái) 老師于10月19日在 知乎Live 開設(shè) 一小時(shí)建立終生受用的閱讀操作系統(tǒng) 的講座,他老人家看到大家伙報(bào)名踴躍,便在微博上發(fā)起了一個(gè) 猜數(shù)量贏取iPhone7 的活動(dòng)。
因?yàn)樵摶顒?dòng)注明了「不限猜的次數(shù)」,我便用 JavaScript 寫一個(gè)自動(dòng)轉(zhuǎn)發(fā)的腳本,用機(jī)器代替手工轉(zhuǎn)發(fā),結(jié)果轉(zhuǎn)發(fā)不到200次就被 李笑來(lái) 老師拉黑了,實(shí)在掃興。與其獨(dú)自郁悶,不如把技術(shù)細(xì)節(jié)分享給大家,祝大家能早日贏得 iPhone7。我的微博地址是:http://weibo.com/stone0090,歡迎大家來(lái)圍觀。
本以為花一兩個(gè)小時(shí)就能搞定這個(gè)微博自動(dòng)轉(zhuǎn)發(fā)的腳本,結(jié)果中途不停的踩坑折騰了大半天。還好早早的被 李笑來(lái) 老師拉黑。不然用 .NET 重寫工具,再接入 打碼兔,還得再花我好幾個(gè)小時(shí)。好不容易國(guó)慶長(zhǎng)假休息一下,還不是想給媳婦換個(gè) iPhone7,我就能用她的 iPhone6s,要不然真心不想花太多時(shí)間搗鼓這個(gè)。廢話不多說(shuō)了,進(jìn)入正題:
前期準(zhǔn)備JavaScript:如果不會(huì) JavaScript,建議先學(xué)完 JavaScript 闖關(guān)記,再繼續(xù)看本文。
Chrome:開發(fā)調(diào)試 JavaScript 必備神器。
微博會(huì)員:據(jù)網(wǎng)上流言,普通用戶如果轉(zhuǎn)發(fā)過(guò)多會(huì)被封號(hào),而會(huì)員則不會(huì)。
填坑過(guò)程打開 Chrome 瀏覽器中,先登錄自己的微博,再進(jìn)入李笑來(lái)老師的微博首頁(yè) http://weibo.com/bylixiaolai 。
打開 Chrome 開發(fā)者工具(Mac 快捷鍵 option + comand + j,Window 快捷鍵 ctrl + shift + i),切換 tab 到 NetWork,并點(diǎn)擊 clear,清除初始化時(shí)所加載的數(shù)據(jù)。
然后手動(dòng)轉(zhuǎn)發(fā)一次微博,獲取到轉(zhuǎn)發(fā)時(shí)所產(chǎn)生的請(qǐng)求。
利用上圖紅框中的關(guān)鍵數(shù)據(jù),使用 JavaScript 模擬發(fā)送轉(zhuǎn)發(fā)請(qǐng)求,具體代碼如下。
// 轉(zhuǎn)發(fā)微博,并評(píng)論 function forwardWeibo(content, retcode) { var formData = new FormData(); formData.append("pic_src", ""); formData.append("pic_id", ""); formData.append("appkey", ""); formData.append("mid", "4024988475919525"); formData.append("style_type", "1"); formData.append("mark", ""); formData.append("reason", content); formData.append("location", "page_100505_home"); formData.append("pdetail", "1005051576218000"); formData.append("module", ""); formData.append("page_module_id", ""); formData.append("refer_sort", ""); formData.append("is_comment_base", "1"); formData.append("rank", "0"); formData.append("rankid", ""); formData.append("_t", "0"); formData.append("retcode", retcode || ""); var xhr = new XMLHttpRequest(); xhr.timeout = 3000; xhr.responseType = "text"; xhr.open("POST", "http://weibo.com/aj/v6/mblog/forward?ajwvr=6&domain=100505&__rnd=" + new Date().getTime(), true); xhr.onload = function(e) { if (this.status == 200 || this.status == 304) { var data = JSON.parse(this.responseText); if (data.code == "100000") { // 轉(zhuǎn)發(fā)微博成功 console.log(content); } else if (data.code == "100027") { // 轉(zhuǎn)發(fā)微博失敗,需要回答圖片驗(yàn)證碼的問(wèn)題 console.log(data); } else { // 轉(zhuǎn)發(fā)微博失敗,其他原因 console.log(data); } } }; xhr.send(formData); } //forwardWeibo("轉(zhuǎn)發(fā)內(nèi)容"); //forwardWeibo("轉(zhuǎn)發(fā)內(nèi)容",verified("答案")); // 每5秒轉(zhuǎn)發(fā)一次 var count = 35000; setInterval(function(){ forwardWeibo(count++); }, 5000);
打開 Chrome 開發(fā)者工具,切換 tab 到 Console,拷貝上面代碼到 Console 中,按回車鍵即可以「5秒1次」的頻率對(duì)李笑來(lái)老師的這條微博進(jìn)行轉(zhuǎn)發(fā)評(píng)論,如需停止請(qǐng)關(guān)閉該頁(yè)面再重新打開。
然而僅過(guò)了2分鐘,成功轉(zhuǎn)發(fā)50多次之后,后面的轉(zhuǎn)發(fā)全部失敗。經(jīng)檢查發(fā)現(xiàn),由于我轉(zhuǎn)發(fā)頻率過(guò)快,被微博官方暫時(shí)封號(hào)?;卮鹨恍┖?jiǎn)單的問(wèn)題把賬號(hào)解封,我把轉(zhuǎn)發(fā)頻率由「5秒1次」改為「10秒1次」,因?yàn)槌抑膺€有其他幾個(gè)號(hào)也在用腳本刷,他們大概用「10秒1次」的頻率,穩(wěn)定的轉(zhuǎn)發(fā)沒(méi)有間斷過(guò),所以「10秒1次」應(yīng)該是相對(duì)安全的。
我調(diào)整頻率之后重新開始轉(zhuǎn)發(fā),但還是轉(zhuǎn)發(fā)失敗,手動(dòng)操作后發(fā)現(xiàn)轉(zhuǎn)發(fā)需要輸入驗(yàn)證碼,以前并沒(méi)有這個(gè)環(huán)節(jié),看來(lái)剛才的封號(hào)是有一些后遺癥的。驗(yàn)證碼我才不怕,專業(yè)的打碼服務(wù) 打碼兔 連12306的驗(yàn)證碼都能輕松應(yīng)付,識(shí)別這里的驗(yàn)證碼就是小兒科。但接入 打碼兔 的工作量有點(diǎn)大,我還是先找找看,有沒(méi)有更簡(jiǎn)單的方法。
果然還真被我找到了,雖然轉(zhuǎn)發(fā)的時(shí)候需要輸入驗(yàn)證碼,但評(píng)論的時(shí)候并不用,手動(dòng)操作一把,評(píng)論并轉(zhuǎn)發(fā)也能成功,便馬上新增了一個(gè)評(píng)論的方法,具體代碼如下。
// 評(píng)論微博,并轉(zhuǎn)發(fā) function commentWeibo(content) { var formData = new FormData(); formData.append("act", "post"); formData.append("mid", "4024988475919525"); formData.append("uid", "1760390531"); formData.append("forward", "1"); formData.append("isroot", "0"); formData.append("content", content); formData.append("location", "page_100505_home"); formData.append("module", "scommlist"); formData.append("group_source", ""); formData.append("tranandcomm", "1"); formData.append("pdetail", "1005051576218000"); formData.append("_t", "0"); var xhr = new XMLHttpRequest(); xhr.timeout = 3000; xhr.responseType = "text"; xhr.open("POST", "http://weibo.com/aj/v6/comment/add?ajwvr=6&__rnd=" + new Date().getTime(), true); xhr.onload = function(e) { if (this.status == 200 || this.status == 304) { if (this.responseText.code == "100000") { console.log(content); } else { console.log(this.responseText) } } }; xhr.send(formData); } //commentWeibo("評(píng)論內(nèi)容"); // 每10秒評(píng)論一次 var count = 35000; setInterval(function(){ forwardWeibo(count++); }, 10000);
沒(méi)高興幾分鐘,又發(fā)現(xiàn)新的問(wèn)題,評(píng)論成功10條,只有1條轉(zhuǎn)發(fā)成功了,這完全是坑爹啊??磥?lái)只有接入 打碼兔 才能徹底解決問(wèn)題了,估計(jì)要花2、3個(gè)小時(shí)才能搞定,算了,先吃飯、洗澡再弄。
磨蹭了1、2個(gè)小時(shí)之后回來(lái),發(fā)現(xiàn)微博轉(zhuǎn)發(fā)輸入驗(yàn)證碼的限制已經(jīng)被取消,但我仍心有余悸,把腳本的頻率改為「30秒1次」讓它慢慢的跑。然后,埋頭研究 打碼兔 的 API,注冊(cè)相關(guān)開發(fā)者賬號(hào),充值測(cè)試費(fèi)用。就在我剛準(zhǔn)備寫代碼之際,腳本又失敗了,而且,這次的報(bào)錯(cuò)跟以前都不一樣,原來(lái)是我已經(jīng)被 李笑來(lái)老師拉黑了,再也不能轉(zhuǎn)發(fā)評(píng)論他老人家任何微博了。
本以為會(huì)刷幾萬(wàn)條微博出來(lái),沒(méi)想到只刷了200條不到,這些微博就留作紀(jì)念不刪了。下面是提前準(zhǔn)備好的批量刪微博的腳本。
//刪除微博 function deleteWeibo() { var items = document.querySelectorAll(".WB_feed_type"); for(var i in items){ if(items[i].getAttribute){ var formData = new FormData(); formData.append("mid", items[i].getAttribute("mid")); var xhr = new XMLHttpRequest(); xhr.open("POST", "http://weibo.com/aj/mblog/del?ajwvr=6", false); xhr.send(formData); console.log(xhr.responseText); } } } deleteWeibo();
信念瞬間崩塌,思想得到解放,果斷去抱著媳婦追 權(quán)利的游戲,啪啪啪,真是一個(gè)美好夜晚。
最后,祝大家國(guó)慶節(jié)快樂(lè)。如果還想聽我聊技術(shù)(che dan),請(qǐng)關(guān)注微信公眾號(hào)「劼哥舍」,老斯基帶你飆車。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/80589.html
摘要:在這段長(zhǎng)達(dá)多分鐘的談話中,李笑來(lái)帶著粗鄙的口吻依次數(shù)落幣圈中的知名人物和區(qū)塊鏈項(xiàng)目,使很多人開始質(zhì)疑李笑來(lái)割韭菜。隨后,楊寧向外界確認(rèn)團(tuán)隊(duì)解散,并高調(diào)宣布推出幣圈。楊寧這個(gè)名字,在區(qū)塊鏈行業(yè),本應(yīng)比李笑來(lái)薛蠻子更有說(shuō)服力。 2018是區(qū)塊鏈誕生的第十個(gè)年頭,這一年的區(qū)塊鏈?zhǔn)澜?,一面是熱火朝天,大量的區(qū)塊鏈項(xiàng)目投入市場(chǎng),另一方面,卻是寒風(fēng)瑟瑟,以比特幣為首的虛擬貨幣價(jià)格一跌再跌。 而大佬...
摘要:加密數(shù)字貨幣價(jià)格巔峰,區(qū)塊鏈成二線企業(yè)股價(jià)春藥年月日,是區(qū)塊鏈行業(yè)的高光時(shí)刻,整個(gè)加密數(shù)字貨幣市值億美元,人民幣近萬(wàn)億元。直接原因是,當(dāng)日,中網(wǎng)載線剛剛宣布與井通網(wǎng)絡(luò)科技有限公司合作開展區(qū)塊鏈產(chǎn)業(yè)。 加密數(shù)字貨幣價(jià)格巔峰,區(qū)塊鏈成二線企業(yè)股價(jià)春藥 2018 年 1 月 8 日,是區(qū)塊鏈行業(yè)的高光時(shí)刻,整個(gè)加密數(shù)字貨幣市值 8139 億美元,人民幣近 6 萬(wàn)億元。在 10 天之前,12 ...
摘要:由于很難在任何課程上專心致志的聽講,因此大學(xué)以來(lái)所有的課程都是靠自學(xué)來(lái)完成的。這樣才能在編程過(guò)程中更加有效率,不是總被低級(jí)的語(yǔ)法錯(cuò)誤所困擾。此為序,寫在自己三十歲的開始。 很久未曾動(dòng)筆寫東西,這次希望可以從記錄技術(shù)學(xué)習(xí)開始,記錄自己的成長(zhǎng)和變化。 由于很難在任何課程上專心致志的聽講,因此大學(xué)以來(lái)所有的課程都是靠自學(xué)來(lái)完成的。盡管學(xué)的并不算有多好,但對(duì)于成長(zhǎng)的渴求和未知的好奇一直伴隨著我...
摘要:記筆記很有必要相信我,大多數(shù)人的記憶力是不可靠的。解決方式遍歷的順序不確定因?yàn)閷?duì)象不是有序的。出租過(guò)程中趕走了某些房客。具體來(lái)說(shuō)就是說(shuō)存在某個(gè)空間沒(méi)有元素的數(shù)組便是稀疏數(shù)組怎么處理將會(huì)確認(rèn)這個(gè)位置有沒(méi)有元素存在。同檢查元素是否存在 記筆記很有必要——相信我,大多數(shù)人的記憶力是不可靠的。 ——《與時(shí)間做朋友》李笑來(lái) 數(shù)組 值的有序集合 弱類型 數(shù)組中的元素可以是各種類型的 ...
閱讀 3281·2021-10-11 10:59
閱讀 2847·2021-10-11 10:58
閱讀 2260·2021-09-04 16:45
閱讀 2737·2019-08-30 15:44
閱讀 688·2019-08-30 15:44
閱讀 3211·2019-08-30 10:51
閱讀 1607·2019-08-29 18:46
閱讀 2768·2019-08-29 13:57