仅供学习交流,请勿用于商业用途,并遵守新浪微博相关规定。

代码目录

此微博机器人的实现功能如下:

模拟登陆新浪微博,获取cookie;

自动上传图片至微博图床;

自动发送内容不同的图文微博;

通过定时任务,实现周期性发微博任务。

效果图

图文内容我固定了,可自行使用第三方api获取要发送的内容或爬取第三方内容发送。(偷个懒...

要实现发送图文微博可以分为三个步骤

登录微博。

图片上传至微博图床获取PID。

发送微博。

登录

登录可以使用Puppeteer node库,很轻松的实现登录获取微博cookie,这里不多介绍,可以自行搜索Puppeteer学习。

Puppeteer是谷歌官方出品的一个通过DevTools协议控制headless Chrome的Node库。可以通过Puppeteer的提供的api直接控制Chrome模拟大部分用户操作来进行UI Test或者作为爬虫访问页面来收集数据。

async function login(username, password) {

const browser = await puppeteer.launch({

// headless: false,

slowMo: 250,

executablePath: ''

});

const page = (await browser.pages())[0];

await page.setViewport({

width: 1280,

height: 800

});

await page.goto("https://weibo.com/");

await page.waitForNavigation();

await page.type("#loginname", username);

await page.type("#pl_login_form > div > div:nth-child(3) > div.info_list.password > div > input", password);

await page.click("#pl_login_form > div > div:nth-child(3) > div:nth-child(6)");

await page.waitForNavigation().then(result => {

return new Promise((resolve) => {

page.cookies().then(async cookie => {

fs.createWriteStream("cookie.txt").write(JSON.stringify(cookie), "UTF8");//存储cookie

await browser.close();//关闭打开的浏览器

resolve(cookie);

});

})

}).catch(e => {

page.screenshot({

path: 'code.png',

type: 'png',

x: 800,

y: 200,

width: 100,

height: 100

});

return new Promise((resolve, reject) => {

readSyncByRl("请输入验证码").then(async (code) => {

await page.type("#pl_login_form > div > div:nth-child(3) > div.info_list.verify.clearfix > div > input", code);

await page.click("#pl_login_form > div > div:nth-child(3) > div:nth-child(6)");

await page.waitForNavigation();

page.cookies().then(async cookie => {

fs.createWriteStream("cookie.txt").write(JSON.stringify(cookie), "UTF8");

await browser.close();

resolve(cookie);

});

})

})

})

}

图片上传至微博图床

上传到微博图床可以看这里 http://weibo.com/minipublish 抓包看上传的接口过程,可以看到上传的是base64图片信息。所以上传前把图片转换成base64编码,而本地图片的编码和互联网链接图片的编码又不一样,这里使用的是互联网链接的图片,node本地图片转换成base64编码更简单些。上传成功后返回微博图床图片的pid。记住这个pid,发微博用的就是这个pid。

发送微博

有了微博cookie和图片pid后就可以发微博了,多张图片时pid之间以|隔开的。

async function weibopost(text, pic_ids = '', cookie) { //发送微博内容(支持带图片)

return new Promise(async (resolve, reject) => {

if (cookie === '') {

reject('Error: Cookie not set!');

}

let post_data = querystring.stringify({

'location': 'v6_content_home',

'text': text,

'appkey': '',

'style_type': '1',

'pic_id': pic_ids,

'tid': '',

'pdetail': '',

'mid': '',

'isReEdit': 'false',

'rank': '0',

'rankid': '',

'module': 'stissue',

'pub_source': 'main_',

'pub_type': 'dialog',

'isPri': '0',

'_t': '0'

});

let 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',

'Connection': 'keep-alive',

'Content-Length': Buffer.byteLength(post_data),

'Content-Type': 'application/x-www-form-urlencoded',

'Cookie': cookie,

'Host': 'weibo.com',

'Origin': 'https://weibo.com',

'Referer': 'https://weibo.com',

'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36',

'X-Requested-With': 'XMLHttpRequest'

};

let {

data

} = await axios.post('https://weibo.com/aj/mblog/add?ajwvr=6&__rnd=' + new Date().getTime(), post_data, {

withCredentials: true,

headers: post_options

})

if (data.code == 100000) {

console.log('\n' + text + '-----Sent!' + '---' + new Date().toLocaleString());

resolve(data);

} else {

console.log('post error');

reject('post error');

}

});

}

最后就是定时任务了,定时任务可以使用node-schedule node库,这里不多介绍,可以自行搜索学习。这里使用的是每隔10分钟发送一次。

function loginTo() {

login(config.username, config.password).then(async () => {

let rule = null;

rule = new schedule.RecurrenceRule();

rule.minute = [01, 11, 21, 31, 41, 51];

try {

let cookie = await getCookie();

getContent(cookie);

} catch (error) {

console.log(error);

}

j = schedule.scheduleJob(rule, async () => { //定时任务

try {

let cookie = await getCookie();

getContent(cookie);

} catch (error) {

console.log(error);

}

});

})

}

参考

java 自动发微博_使用node搭建自动发图文微博机器人相关推荐

  1. java自动发图文微博_使用node搭建自动发图文微博机器人的方法

    本文仅供学习交流,请勿用于商业用途,并遵守新浪微博相关规定. 代码目录 此微博机器人的实现功能如下: 模拟登陆新浪微博,获取cookie: 自动上传图片至微博图床: 自动发送内容不同的图文微博: 通过 ...

  2. java自动发图文微博_使用node搭建自动发图文微博机器人

    仅供学习交流,请勿用于商业用途,并遵守新浪微博相关规定. 代码目录 此处输入图片的描述 此微博机器人的实现功能如下: 模拟登陆新浪微博,获取cookie: 自动上传图片至微博图床: 自动发送内容不同的 ...

  3. java微信中控服务器_使用ThinkJs搭建微信中控服务的实现方法

    本人前端渣渣一枚,这篇文章是第一次写,如果有硬核bug,请大佬们轻喷.指出... 另外,本文不涉及任何接口安全.参数校验之类的东西,默认对调用方无脑级的信任:joy: 目前自用的接口包括但不限于以下这 ...

  4. html自动生成工具_关于STM32代码自动生成的工具的进度....

    前情提要:STM32代码自动生成工具_本想...但是...可是...所以 首先说一下那几天大家的反应,有的持观望态度,毕竟STM32CUBE很香:有的很激动,期待我快点出东西:还有的很淡定,知道我在挖 ...

  5. win7设置自动开机时间_电脑可以设置自动开机时间,您知道吗?

    基本上每台电脑都可以在主板BIOS里设定固定的开机时间.比如你早上8点上班,可以设定7点50分自动开机.如果是服务器开机时间比较久,你也可以设定在7点开机或更早时间.上班来到座位上电脑已经开好,不用手 ...

  6. 苹果手机如何关闭自动续费_手机APP会员自动续费怎么办?教你一招快速关闭!...

    做最有趣有料的科技自媒体 你们知道学霸君每个月最讨厌收到什么短信吗? 就是APP自动续费的短信.... 特别是有一些软件,明明百八年前就已经没用了 当时只是因为年少无知觉得会员包月续费开通会比较便宜, ...

  7. 如何关闭苹果手机自动扣费_苹果怎样关闭自动续费

    我们在使用苹果手机的时候,会发现很多的软件是有自动续费服务的,比如我们的音乐,比如我们的视频网站等等都是有自动续费的,那么怎么取消呢?下面就来简单介绍一下苹果怎样关闭自动续费. 苹果怎样关闭自动续费? ...

  8. java调用微信加密_用spring搭建微信公众号开发者模式下服务器处理用户消息的加密传输构架(java)...

    要搭建加密传输的微信公众号消息传输,首先要在开发这平台下载一下微信加密的相关jar包,并做一些准备.准备的步骤如下: 1.打开开发者文档,找到消息加减密--->接入指引,如下图所示: 2.在页面 ...

  9. java web方面杂志_环境方面比较好发的期刊_全球环境类最好的期刊_环境领域top期刊...

    环境的师兄师姐们,环境领域的比较好的期刊有哪些 环境科学,环境科学学报,环境科学研究,中国环境科学,生态学报,应用生态学报,土壤通报都是可以的.偏冶金方面的还有中国有色金属学报.这个是国内.国外的话, ...

  10. 黑群晖给局域网电脑发消息_老电脑搭建家用NAS,省钱又好用

    朋友说需要一台文件服务器自己用,从仓库里随便拿了一台联想的老电脑给他刷个黑群,确认板子是千兆网卡,开机点亮没问题,开始"折腾"!,顺便把这个过程记录下来跟大家分享一下. 这是台很老 ...

最新文章

  1. 函数图像轻松画:教你用永中图象
  2. 能详细地讲讲stm32该怎么学吗?
  3. hk.module must be initialized inside an hk.transform
  4. 目标检测 RCNN算法详解
  5. 跨链(5)“蚂蚁区块链”之预言机
  6. GCD介绍(一): 基本概念和Dispatch Queue
  7. 【若依(ruoyi)】quartz.sql 脚本重新导入时,遇到因foreign key外键无法删除错误#1217
  8. 【Linux】一步一步学Linux——gpasswd命令(90)
  9. php申请系统,PHP+MYSQL的文章管理系统(一)_php
  10. .NET HttpGet 获取服务器文件下的图片信息 同步和异步方式处理
  11. JavaScript学习(二十七)—解决IE以及IE8之前的浏览器下面的添加事件或者删除事件
  12. 脱离微信,在硬件设备运行小程序?小程序硬件框架大揭秘!
  13. struts2无法调用类静态方法的解决办法
  14. Linux与Xshell:登陆服务器与后台执行程序
  15. 社区车辆信息管理系统
  16. leapFTP上传网页到服务器,leapftp登录ftp服务器
  17. 【渝粤教育】电大中专学前教育学_1作业 题库
  18. centos时钟同步
  19. js基础-点击切换div背景颜色
  20. 软件自动化测试全套视频教程

热门文章

  1. 计算机图形学 dda,计算机图形DDA算法
  2. Ubuntu系统下安装Gaussian09和GaussianView5(GS16和GV6安装同理)
  3. C++代码实现栈基本操作
  4. ic启动器怎么导入模组_Model Y和Model 3的模组拆解对比
  5. 双网口工业路由器 网络传输层的“常青树”
  6. 5g/4g工业无线路由器
  7. 计算机无法删除tf卡的内容,SD卡不能删除或格式化怎么办?这些方法一定要会...
  8. matlab中dfft,2-DFFT 该实验的目的是开发一个 2-D FFT程序包 联合开发网 - pudn.com
  9. GPS之Ublox方案设计
  10. 自己动手写操作系统(三)