工具:anyproxy 安卓模擬器 mumu springmvc程序 js command腳本
原理:安卓模擬器 安裝了軟件后,利用代理 攔截請求,獲得json通過js發送給spirngmvc程序,然后存到數據庫,通過command腳本實現安卓模擬器自動翻頁
先安裝anyproxy
https://www.cnblogs.com/yoable/p/6374134.html
下載mumu模擬器
打開mumu模擬器 for mac or for windows
然后命令行 敲 anyproxy --intercept
到網易mumu模擬器中 設置網絡代理 本機的Ip 然后8001
到模擬器的瀏覽器中敲
http://本機ip:8002/fetchCrtFile 下載ca證書,破解https連接
然后ctrl + c 把之前的命令行干掉
啟動我們的springmvc程序
啟動好之后 執行命令anyproxy --intercept --rule /Users/liyj/sample.js (sample.js的絕對地址,里面是一些回調函數,就是當Json傳過來的時候回調用這些方法,方法中我用的ajax異步調用springmvc程序)
sample.js文件內容
var logMap = {} var fs = require('fs'); var http = require('http'); var querystring=require("querystring"); var logger = fs.createWriteStream('/Users/liyj/urlLog.log', {encoding: 'utf-8',flag: 'a'}); function logPageFile(url) { logger.write(url + '\r\n'); } module.exports = { *beforeSendResponse(requestDetail, responseDetail) { if(requestDetail.url.indexOf('api-eagle.amemv.com/aweme/v1/feed/') == -1 && requestDetail.url.indexOf('aweme-eagle.snssdk.com/aweme/v1/feed/') == -1) return; var options = {
//springmvc程序的ip和端口 就是本機Ip和端口 hostname:'192.168.5.62', port:8081, method: 'POST',
//requestmapping映射的哪個路徑 path: '/scheduler-crawler/crawldy/do', headers: { 'Content-Type': 'application/json' }, json : {"json" : "fdsaf11"} }; var post_req = http.request(options, function(_res){ _res.setEncoding('utf8'); _res.on('data', function (chunk) { console.log('Response: ' + chunk); }); }); post_req.write(responseDetail.response.body,'utf-8'); post_req.end(); } }
然后打開模擬器中的抖音程序,向下翻頁就可以抓取了。抖音是一次返回6條數據 翻6次后 重新在返回6條
利用adb連接模擬器后,adb在模擬器上模擬向下滑操作,這種就跟人為看視頻操作一樣,很難被察覺
adb connect 127.0.0.1
然后執行/Users/liyj/Desktop/f.command ; exit;(f.command文件的絕對路徑)
f.command內容為
for (( j=40;j<50000000;j++)) do adb shell input swipe 400 850 400 200 350 done