本文仅供学习交流,请勿用于商业用途,遵守新浪微博相关规定。
代码目录
该微博机器人的实现功能如下:
模拟登陆新浪微博,获取cookie;自动上传图片到微博画床;自动发送图文不同内容的微博;通过定时任务,实现周期性微博任务。翻译
我已经修复了图形内容,所以我可以使用第三方api来获取要发送的内容,或者抓取第三方内容来发送。(偷懒.
实现发送图文微博有三个步骤
登录微博。把图片上传到微博画床获取PID。发微博。注册
可以使用Puppeteer节点库进行登录,这样可以轻松登录并获取微博cookie。这里没有介绍,可以搜傀儡自己学。
木偶师是谷歌生产的Node库,通过DevTools协议控制无头Chrome。可以直接控制Chrome模拟UI Test的大部分用户操作,也可以作为爬虫访问页面,通过Puppeteer提供的api收集数据。async函数登录(用户名,密码){ const browser=await puppeter . launch({//headless : false,slowMo: 250,executableepath : ' ' });const page=(await browser . pages())[0];wait page . setviewport({ width : 1280,height : 800 });wait page . goto(' https://Weibo.com/');wait page . waitfornavigation();wait page.type('#loginname,username);wait page . type(# pl _ log in _ form div div : th-child(3)div . info _ list . password div input ',password);wait page . click(' # pl _ log in _ form div div : th-child(3)div : th-child(6)');wait page.waitForNavigation()。然后(结果={返回新的Promise((resolve)={ page . cookies()。然后(async cookie={ fs . CreateWriteStream(' cookie . txt ')。write(JSON.stringify(cookie),' UTF8 ');//store cookie wait browser . close();//关闭打开的浏览器resolve(cookie);});}) }).catch(e={ page .截图({ path: 'code.png ',type: 'png ',x: 800,y: 200,width: 100,height : 100 });返回新承诺((解决,拒绝)={readsyncbyrl('请输入验证码')。然后(async(code)={ await page . type(# pl _ log in _ form div div 3360 th-child(3)div . info _ list . verify . clear fix div input wait page . click(# pl _ log in _ form div div : th-child(3)div : th-child(6));wait page . waitfornavigation();page.cookies()。然后(async cookie={ fs . CreateWriteStream(' cookie . txt ')。write(JSON.stringify(cookie),' UTF8 ');wait browser . close();解析(cookie);});})})}}图片上传到微博画床
上传到微博图片床,可以看到从http://weibo.com/minipublish,上传的界面流程,可以看到base64图片信息上传。因此,在上传之前,图片被转换为base64编码,但是本地图片的编码与互联网链接图片的编码不同。将节点的本地图片转换为base64编码更简单。上传成功后,返回微博床图片的pid。记住这个pid,用来发微博。
发送微博
有了微博cookie和图片pid,就可以发微博了。图片多的时候,pid用|。
异步函数weibopost(text,pic_ids=' ',cookie) { //发送微博内容(支持带图片)返回新的承诺(异步(解析,拒绝)={ if(Cookie==' '){ reject('错误: Cookie未设置!');}让post _ data=查询字符串。stringify({ ' location ' : ' V6 _ content _ home ',' text': text ',' appkey': ' ',' style_type': '1 ',' pic _ id ' : pic _ ids ',' tid': ' ',' pdetail': ' ',' mid': ' ',' isReEdit ' : ' false ',' rank ' :让post _ options={ ' Accept ' : ' */*,' Accept-Encoding': 'gzip,deflate,br ',' Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7”,“连接”:“保持活动”,“内容长度”:缓冲区。bytelength(post _ data),“Content-Type”:“application/x-www-form-URL编码”,“Cookie”: Cookie,“Host”:“Weibo.com”,“Origin”https://Weibo。' com ','参考' https://微博。' com ','用户代理' 3: '英特尔Mac OS X 10 _ 13 _ 3)苹果WebKit/537.36(KHTML,像壁虎)Chrome/64。0 .3282 .167 Safari/537.36 ',' X-Requested-With ' : ' XMLHttpRequest ' };让{数据}=等待axios。发帖(' https://微博。com/aj/mblog/add?ajwvr=6__rnd=' new Date().getTime(),post_data,{ withCredentials: true,header RS : post _ options })if(data。代码==100000){控制台。日志(' n ' text '-send!-新日期()。toLocaleString());解析(数据);} else { console。日志(“发布错误”);拒绝("发布错误");} });}最后就是定时任务了,定时任务可以使用节点计划节点库,这里不多介绍,可以自行搜索学习。这里使用的是每隔10分钟发送一次。
函数loginTo(){ log in(config。用户名,配置.密码).然后(async()={ let规则=null规则=新计划recurrencerrule();rule.minute=[01,11,21,31,41,51];尝试{ let cookie=wait GetCookie();getContent(cookie);} catch(错误){ console.log(错误);} j=schedule.scheduleJob(rule,async ()={ //定时任务尝试{ let cookie=wait GetCookie();getContent(cookie);} catch(错误){ console.log(错误);} });})}代码地址: github地址
参考
https://github.com/itibbers/weibo-post
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。