java 自动发微博_使用node搭建自动发图文微博机器人
仅供学习交流,请勿用于商业用途,并遵守新浪微博相关规定。
代码目录
此微博机器人的实现功能如下:
模拟登陆新浪微博,获取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搭建自动发图文微博机器人相关推荐
- java自动发图文微博_使用node搭建自动发图文微博机器人的方法
本文仅供学习交流,请勿用于商业用途,并遵守新浪微博相关规定. 代码目录 此微博机器人的实现功能如下: 模拟登陆新浪微博,获取cookie: 自动上传图片至微博图床: 自动发送内容不同的图文微博: 通过 ...
- java自动发图文微博_使用node搭建自动发图文微博机器人
仅供学习交流,请勿用于商业用途,并遵守新浪微博相关规定. 代码目录 此处输入图片的描述 此微博机器人的实现功能如下: 模拟登陆新浪微博,获取cookie: 自动上传图片至微博图床: 自动发送内容不同的 ...
- java微信中控服务器_使用ThinkJs搭建微信中控服务的实现方法
本人前端渣渣一枚,这篇文章是第一次写,如果有硬核bug,请大佬们轻喷.指出... 另外,本文不涉及任何接口安全.参数校验之类的东西,默认对调用方无脑级的信任:joy: 目前自用的接口包括但不限于以下这 ...
- html自动生成工具_关于STM32代码自动生成的工具的进度....
前情提要:STM32代码自动生成工具_本想...但是...可是...所以 首先说一下那几天大家的反应,有的持观望态度,毕竟STM32CUBE很香:有的很激动,期待我快点出东西:还有的很淡定,知道我在挖 ...
- win7设置自动开机时间_电脑可以设置自动开机时间,您知道吗?
基本上每台电脑都可以在主板BIOS里设定固定的开机时间.比如你早上8点上班,可以设定7点50分自动开机.如果是服务器开机时间比较久,你也可以设定在7点开机或更早时间.上班来到座位上电脑已经开好,不用手 ...
- 苹果手机如何关闭自动续费_手机APP会员自动续费怎么办?教你一招快速关闭!...
做最有趣有料的科技自媒体 你们知道学霸君每个月最讨厌收到什么短信吗? 就是APP自动续费的短信.... 特别是有一些软件,明明百八年前就已经没用了 当时只是因为年少无知觉得会员包月续费开通会比较便宜, ...
- 如何关闭苹果手机自动扣费_苹果怎样关闭自动续费
我们在使用苹果手机的时候,会发现很多的软件是有自动续费服务的,比如我们的音乐,比如我们的视频网站等等都是有自动续费的,那么怎么取消呢?下面就来简单介绍一下苹果怎样关闭自动续费. 苹果怎样关闭自动续费? ...
- java调用微信加密_用spring搭建微信公众号开发者模式下服务器处理用户消息的加密传输构架(java)...
要搭建加密传输的微信公众号消息传输,首先要在开发这平台下载一下微信加密的相关jar包,并做一些准备.准备的步骤如下: 1.打开开发者文档,找到消息加减密--->接入指引,如下图所示: 2.在页面 ...
- java web方面杂志_环境方面比较好发的期刊_全球环境类最好的期刊_环境领域top期刊...
环境的师兄师姐们,环境领域的比较好的期刊有哪些 环境科学,环境科学学报,环境科学研究,中国环境科学,生态学报,应用生态学报,土壤通报都是可以的.偏冶金方面的还有中国有色金属学报.这个是国内.国外的话, ...
- 黑群晖给局域网电脑发消息_老电脑搭建家用NAS,省钱又好用
朋友说需要一台文件服务器自己用,从仓库里随便拿了一台联想的老电脑给他刷个黑群,确认板子是千兆网卡,开机点亮没问题,开始"折腾"!,顺便把这个过程记录下来跟大家分享一下. 这是台很老 ...
最新文章
- 函数图像轻松画:教你用永中图象
- 能详细地讲讲stm32该怎么学吗?
- hk.module must be initialized inside an hk.transform
- 目标检测 RCNN算法详解
- 跨链(5)“蚂蚁区块链”之预言机
- GCD介绍(一): 基本概念和Dispatch Queue
- 【若依(ruoyi)】quartz.sql 脚本重新导入时,遇到因foreign key外键无法删除错误#1217
- 【Linux】一步一步学Linux——gpasswd命令(90)
- php申请系统,PHP+MYSQL的文章管理系统(一)_php
- .NET HttpGet 获取服务器文件下的图片信息 同步和异步方式处理
- JavaScript学习(二十七)—解决IE以及IE8之前的浏览器下面的添加事件或者删除事件
- 脱离微信,在硬件设备运行小程序?小程序硬件框架大揭秘!
- struts2无法调用类静态方法的解决办法
- Linux与Xshell:登陆服务器与后台执行程序
- 社区车辆信息管理系统
- leapFTP上传网页到服务器,leapftp登录ftp服务器
- 【渝粤教育】电大中专学前教育学_1作业 题库
- centos时钟同步
- js基础-点击切换div背景颜色
- 软件自动化测试全套视频教程
热门文章
- 计算机图形学 dda,计算机图形DDA算法
- Ubuntu系统下安装Gaussian09和GaussianView5(GS16和GV6安装同理)
- C++代码实现栈基本操作
- ic启动器怎么导入模组_Model Y和Model 3的模组拆解对比
- 双网口工业路由器 网络传输层的“常青树”
- 5g/4g工业无线路由器
- 计算机无法删除tf卡的内容,SD卡不能删除或格式化怎么办?这些方法一定要会...
- matlab中dfft,2-DFFT 
该实验的目的是开发一个 2-D FFT程序包 联合开发网 - pudn.com
- GPS之Ublox方案设计
- 自己动手写操作系统(三)